# Socket wird nicht richtig geschlossen



## bluescreen (26. Apr 2007)

Ich habe versucht einen MultiThread Server zu implementieren. Leider habe ich das Problem, dass der Thread für den "Client" auf der Serverseite (für jeden Client wird dort ein Thread erzeugt) in eine Endlosschleife läuft sobald der Client ein close() aufruft. Dabei liefert die read Methode des InputStreams immer -1.

Ich habe das Ganze mal mit dem MultiThreadServer von Sun probiert - selbes Problem. Deswegen hier mal der Link auf die externen files bei Sun, damit ihr euch das vielleicht mal anschauen könnt.

Beschreibung
http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/socket.html#multi

Server
http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/Code/SocketThrdServer.java

Client
http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/Code/SocketClient.java

Wie gesagt: Ich starte beide - verbinde -> wenn ich jetzt den Client schliesse, läuft der für diesen Client zuständige "ClientWorker" auf dem Server in einer Endloschleife. 
Dasselbe passiert auch, wenn ich vor dem Schliessen des Clients socket.close() aufrufe.

Eigentlich müsste ich ja nur abbrechen sobald der Stream -1 zurückgibt oder gibts da irgendwelche "Nebenwirkungen" ?


mfg bluemoon


----------



## GoWa (27. Apr 2007)

Liegt am blocking mode

getInputStream()

Hab leider keinen schimmer ob das schon immer so war oder nicht. Gehe aber nicht davon aus. Das Sun Beispiel ist von 99 denke da wars noch ein wenig anderst.


----------



## bluescreen (27. Apr 2007)

Ich versteh jetzt nicht so ganz wie du das meinst. getInputStream() wird doch vor der WHILE Schleife aufgerufen. Die Methode read() ist blockierend und das läuft auch ganz gut - aber nur solange, bis der client close() aufruft und der Server das scheinbar nicht erkennt, denn isClosed() bleibt hier leider false und isConnected() bleibt true.


----------

