Java socket - reset servera

0

Witam.
Mam napisanego jara pobierającego dane z portu serwera.
Jednak właściciele serwera od czasu do czasu restartują go i wtedy aplikacja mi grzęźnie.
Jak się przed tym uchronić. Czy aby wyłapać że serwer jest niedostępny wystarczy pytanie "socket.isConnected() != true"

0

W trakcie transmisji musisz łapać wyjątek ConnectionReset i jakoś go obsługiwać, np. sprawdzać, co już zostało odebrane, a co jeszcze nie, łączyć się od nowa i wznawiać transmisję w odpowiednim miejscu.

0

na początku aplikacji mam nawiązanie połączenia, potem tworzę kanał binarny do czytania i w pętli czytam z niego.
Jeśli zrestartują serwer to przy próbie czytania wywali mi wyjątek "ConnectionReset" tak ?
Bo rozumiem że aplikacja sama nie ruszy dalej po ponownym odpaleniu serwera tylko na nowo będę musiał otworzyć strumień i przesłać dane do logowania , stary strumień w momencie restartu jest zrywany ?

0

Wywali connection reset, albo inne "broken pipe" (po polsku: złamana rura:)). Najszybciej będzie, jak sam sprawdzisz, co akurat takie połączenie wywala w przypadku resetu serwera. To może zależeć od tego, jaki to serwer, jak opisane są gniazda i jak jest resetowany (poleceniem, twardym resetem itd.). Socket jest wtedy zamykany razem ze strumieniami i wszystko szlag trafia. Obawiam się, że musisz sam wykryć, ile danych już przeszło, a ile nie, żeby nie wznawiać pobierania od początku, tylko otworzyć znów socket i strumienie i poprosić serwer o dane od konkretnego momentu - oczywiście jeśli serwer to potrafi lub możesz do niego coś takiego dopisać. Jeśli serwer nie wspiera takich manewrów, to niestety możesz sobie jedynie zautomatyzować rozpoczęcie pobierania od nowa.

Pamiętaj, że serwer po resecie może się chwilę uruchamiać, więc daj klientowi trochę czasu lub kilka szans na ponowne rozpoczęcie pobierania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1