Buffererwriter keine Exception obwohl Client weg

Talisman

Neues Mitglied
Hallo Leute,
ich habe lange gesucht, mir fehlen leider die passenen Begriffe um eine Antwort zu finden.
Ich habe in einer Client / Server (chat) umgebung folgendes:

Server erzeugt für jeden Client einen Thread

in = new BufferedReader(new InputStreamReader( clientSocket.getInputStream()) ) ;
out= new BufferedWriter(new OutputStreamWriter( clientSocket.getOutputStream()) ) ;

Soweit so gut, ich sende nun Daten zu den Clients, das funktioniert auch problemlos
try {
out.write(outmsg);
out.flush();
} catch(IOException e) {
debugerr("sendToClient: "+outmsg);
return;
}

Ich teste das im Hause mit drei Rechnern.

Aber und genau da ist mein Problem.

Trenne ich einen Client einfach vom Netz, (Kabel ausstecken) wird trotzdem weiterhin lustig geschrieben.
Keine Exception, null. Verbinde ich nun den Client wieder dann kommt alles was nicht gesendet werden konnte auf einen Schlag.
Ich habe nicht das große Java Wissen aber wo speichert denn der Server diese Daten. Spätestens beim Flush sollte doch ein Fehler auftauchen?
Ich habe versuchsweise auch schon die buffersize von out auf 512 gesetzt und vollgeschrieben, egal. Stecke ich das Kabel beim Client wieder an. Ratzfatz ist alles da.

Ich hoffe ich konnte das erklären. Ich habe keine Ahnung an welcher Ecke ich da suchen muss. Ein Fingerzeig in die richtigte Richtung wäre super.

Echt kopfkratz
 
Das Phänomen entsteht, weil die unter den Streams liegende TCP-Verbindung durch das Netzkabel ziehen nicht abgebrochen wird. Weder Client noch Server haben nämlich irgendwelche Pakete gesehen, die diese Verbindung abbrechen würden (FIN- oder RST-Flags im TCP-Header). Es sieht für sie also so aus, als würden einfach keine Daten fließen und sie warten darauf, dass wieder welche fließen. Du kannst beim connect des Sockets einen Timeout mitgeben. Dann würde nach Ablauf des Timeouts eine Exception fliegen. Der Standard-Timeout ist übrigens 0, also kein Timeout.
 

Zurück
Oben