Java socket - reset servera

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"

KK
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:135
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.

P8
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:4
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 ?

KK
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:135
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.