# Socket schließen mit .close()



## socialcocer (11. Apr 2011)

Hallo,

habe mich heute erstmals drangesetzt und ein bisschen mit Sockets rumhantiert. Raus sollte eigentlich ein kleines Chat-Programm kommen (1 zentraler Host zum Verwalten von Nachrichten an mehrere Clienten).

Jetzt wollte ich mal austesten, ob der Host auch ordnungsgemäßig die Sockets wieder trennen kann. Also zunächst mit isClosed() den Status vor und nach close() ausgeben lassen. Dies bringt das gewünschte Ergebnis. Wenn ich die Prüfung jedoch mit isConnected() mache, erhalte ich vor und nach der close()-Methode ein true.

Jetzt bin ich ein bisschen verwirrt und frage mich, wie man nun ordnungsgemäß die Verbindung zu einen Socket "kappen" kann.

Gruß,
socialcoc(d)er


----------



## mjdv (11. Apr 2011)

http://www.java-forum.org/netzwerkp...ahrnehmen-serversocket-geschlossen-wurde.html

Schaue dir dort mal die Antwort von tuxedo an


----------



## FArt (12. Apr 2011)

Wenn du am Anfang bist, solltest du darüber nachdenken nicht mit plain sockets zu arbeiten, sondern eine API verwenden, die z.B. mit kurzfristigen Verbindungsabbrüchen umgehen kann, acknowledge unterstützt und selbsttätig Verbindungsabbrüche registriert. In Frage kämen z.B. JBoss Remoting oder Apache Mina...


----------



## despikyxd (12. Apr 2011)

das beispiel ist SEHR schlecht gewählt .. ich habe aber bewusst auf diesen thread nicht mehr geantwortet da es nicht mehr zeitnah wäre

und wenn es um punkto chat geht geht das ganze NOCH einfacher ...
den irgendwie musst du ja die daten vom server anzeigen ... also einfache eine while(true) in einen eigenen thread stecken in der *z.b. bei verwendung von BufferedReader* ein ständiges "String line=bufferedReader.readLine()" durchläuft ... danach prüfst du mit if ... wenn line.equals("") true liefert dann ist der string lediglich leer ... aber die verbindung noch aktiv ...
erst wenn line==null erfüllt ist *BufferedReader.readLine() returned "null" bei einem fehler* weist du das die verbindung abgerissen ist ...

kugg dir das beispiel auf java.seit.net an ... *allerdings solltest du als inputstream dashier machen : new BufferedReader(new InputStreamReader(Socket.getInputStream())) da das auf java.seite.net mitlerweile deprecated ist*


----------



## socialcocer (12. Apr 2011)

danke Leute, werde ja jetzt anstatt die isConnected-Methode auf isClosed zurückgreifen. Mit einer ausfürhlicheren Beschreibung beider Methoden in der API doc, hätte man dies verhindern können..


----------

