🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #153698

Java i automatyczne wznawianie połączenia klienckiego socket

#153698
From: Artik
Date: Sun, 09 Dec 2012 15:29
79 lines
3496 bytes
Witam,
Czy mógłbym Was prosić o wskazanie sposobu obsłużenia błędu połączenia z serwerem tcp wykonywanym przez standardowe gdniazdo?
Próbuje to zrealizować tworząc dwa wątki - jeden - najważniejszy dla usługi - służy do wysylania cyklicznie danych do serwera, drugi thr1 sluży do sprawdzania czy nie było awarii w pierwszym wątku (socket polaczenia ustawiam na null w wyniku obsługi wyjątku błedu połączenia) i wówczas wywołuje metodę:
	public Socket sock=null;
	private BufferedReader r;
	private BufferedWriter out;
...
public void stopSocket() {
try {
		 try{
		     if (r != null){
		        r.close();
		        r=null;
		         }
		 } catch (IOException e) {
		      Log.d("APLIKACJA", e.getMessage()+"    "+e.getCause());
		 }
	 
		 try{
		      if (out != null)
		      {
		    //	  sock.shutdownOutput();
		     out.close();}
		      out=null;
		 } catch (IOException e) {
		     Log.d("APLIKACJA", e.getMessage()+" "+e.getCause());
		 }
	 try{                            
	     if (sock != null){
	     sock.close();
	     sock=null;
	     }
	  catch (IOException e) {
	      Log.d("APLIKACJA", e.getMessage()+"    "+e.getCause());
	      sock=null;
	      out=null;
	      r=null;
	     }
	 }

i probuje w watku sprawdzajacym poprawnosc polaczenia dokonać jego wznowienia:

				thrd1 = new Thread(new Runnable() {
					public void run() {
						while (!Thread.interrupted()) {
							try {
								Thread.sleep(1000);
							} catch (InterruptedException e1) {
							
							}
							if (sock==null)
							try {

								sock = new Socket();
								sock.connect(new InetSocketAddress(
										address, 5000), 1000);
								if ((thrd2!=null)&&(!thrd2.isAlive()))
								thrd2.start();
							} catch (UnknownHostException e) {
								stopSocket();

							} catch (IOException e) {
				            stopSocket();
							}
						}
						;
					}
				});
				if ((thrd1!=null)&&(!thrd1.isAlive()))
				thrd1.start();
			}
		});
	}
	
Wznowienie nastepuje ale ponownie wlaczony serwer po przerwie - otrzymuje kilkanascie prob rozpoczęcia polaczenia ze strony przedstawionego klienta. Jak czas niedostępności serwera jest zbyt dlugi - aplikacja kliencka niestety "pada":(

Czy mogę liczyć na Waszą pomoc?

Artik
Technical Details
Message-ID: <8da568b8-c14e-42d2-97a4-e872c6eb8675@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!c8no2156888qao.0!news-out.google.com!gf5ni48613681qab.0!nntp.google.com!c8no2199271qao.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
Received: by 10.224.184.11 with SMTP id ci11mr9336104qab.1.1355066945037;        Sun, 09 Dec 2012 07:29:05 -0800 (PST)
Received: by 10.49.116.34 with SMTP id jt2mr2538043qeb.38.1355066944954; Sun, 09 Dec 2012 07:29:04 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!c8no2156888qao.0!news-out.google.com!gf5ni48613681qab.0!nntp.google.com!c8no2199271qao.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.java
Date: Sun, 9 Dec 2012 07:29:04 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=88.156.28.232; posting-account=FYIyEAoAAAANuhVTqhCgp1nBx7dpZ-nl
NNTP-Posting-Host: 88.156.28.232
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <8da568b8-c14e-42d2-97a4-e872c6eb8675@googlegroups.com>
Subject: Java i automatyczne wznawianie połączenia
 klienckiego socket
From: Artik <olsztyn.arti@gmail.com>
Injection-Date: Sun, 09 Dec 2012 15:29:05 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit