# Verbindungsüberwachung



## DarkGuardian (14. Mai 2009)

Hallo zusammen

Ich empfange von einem Server Datenpakete. Dazu nutze ich einen Socket, der mir die Daten über Streams bereitstellt und auch sendet. Soweit eigentlich kein Problem.

Nun brauche ich aber eine Überprüfung, ob die Gegenstelle noch verfügbar ist. Zum Einen kann es passieren, dass die Netzwerkverbindung getrennt wird oder auch dass die Gegenstelle beendet wurde. Wie kann ich über einen Socket prüfen, ob die Gegenstelle erreichbar ist.

Bisher hatte ich über mSocket.isClosed() gedacht, dass mir das entsprechende Infos liefert. Aber dem ist ja nicht so. Gibt es da direkt Möglichkeiten oder muss ich das über ein Timeout im Zusammenhang mit dem genutzten Datenprotokoll umsetzen?


----------



## DarkGuardian (14. Mai 2009)

Ach, wenn man mal genauer in die API schaut, sollte man sehen, dass es auch eine Methode namens isConnected und isBound. Ich gehe mal davon aus, dass mir die Methoden weiterhelfen sollten.


----------



## Geeeee (14. Mai 2009)

Das wird dir nicht allzuviel helfen. Die Funktionen holen "nur" Informationen aus dem Socketobjekt. D.h. wenn eine Verbindung aufgebaut wurde ist isConnected true. Wenn du nun den Socket nicht ordentlich schließt und den "Stecker ziehst" wird noch immer true zurückgeliefert. Die Funktionen testet die Verbindung nicht, sondern schaut nur in den Status den Sockets.
Ich hab vor längerer Zeit auch damit Probleme gehabt (weil ich eben gerade das Steckerziehen erkennen wollte) und einen auf timeout basierenden Workaround gefunden. Ich finde gerade den Link nicht, aber Google sollte dir helfen.
Kann dir aber auch nicht viel mehr dazu sagen, weil wir aus weiteren Gründen den guten alten Heartbeat (Ping.Pong etc.  ) eingeführt haben.


----------



## DarkGuardian (14. Mai 2009)

Hallo Geeeee

Danke für die Rückmeldung.

Bisher konnte ich das eh noch nicht prüfen. Daher hast du mir mit deiner Aussage einiges an Zeit gespart. Wenn ich über die Java-API nicht direkt kontrollieren kann, ob die Verbindung noch besteht (oder z.B. Stecker gezogen wurde), dann brauche ich einen Workaround.

Das du keinen Link parat ist, ist nicht schlimm, denn ansich ist der Workaround klar. Ich habe sogar schon ein regelmäßig empfangenes Ping-Kommando. Dieses habe ich bisher zur Überprüfung eingesetzt, ob der Server gerade überlastet ist (halt wenn das Ping ausbleibt). Dann werde ich das halt so umstellen, dass dann von einem Verbindungsverlust ausgegangen wird. Und einen mehrfachen Connect vom Client fängt der Server eh ab. Daher sollte das kein Problem sein.

Mal sehen, wann ich mich an die Umsetzung machen kann. Falls dabei neue Erkenntnisse herauskommen, poste ich das hier.

Bis dann
DG


----------



## tuxedo (18. Mai 2009)

Kann Geeee (wieviele e's sind das denn?) nur zustimmen.
PingPong zwischen Client und Server ist meiner Ansicht nach die einzig zuverlässige Methode. 

- Alex


----------



## MiDniGG (18. Mai 2009)

tuxedo hat gesagt.:


> Kann Geeee (wieviele e's sind das denn?)



5 ;-P


----------

