Article View: pl.comp.lang.java
Article #153698Java i automatyczne wznawianie połączenia klienckiego socket
From: Artik
Date: Sun, 09 Dec 2012 15:29
Date: Sun, 09 Dec 2012 15:29
79 lines
3496 bytes
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-mailShow 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