# close() Socket Verbindung nötig ?



## jupa (19. Feb 2008)

Hallo,

ich habe eine kleine Socket Client/Server Kommunikation.

ich sende daten über den Client zum Server, dieser bearbeitet diese und sendet mir eine Antwort.

Am Client warte ich mit readLine() auf die Antwort.

Das ganze klappt auch ohne die close Methode am Server zu benutzen...

Nur wenn ich mehrere Antworten also Zeilen vom Server empfangen will dann muss ich die close Methode im Server benutzen um die readLine Schleiffe am Clienten  beenden zu können...

String lInputLine = "";
String lAnswer = "";		        

while ((lInputLine = serverIn.readLine()) != null)
       {
               lAnswer = lAnswer + lInputLine;
       }

System.out.println(lAnswer);	

ich möchte nur fragen ob meine Vorgehensweise so korrekt ist...

Danke schonmal


----------



## SlaterB (19. Feb 2008)

das close() sollte sein, wenn die Verbindung zu beenden ist,

falls du es aber nur zur Unterbrechung der Schleife einsetzt und danach eine neue Connection aufmachst, 
dann ist es doch besser, sich eine art Protokoll auszudenken, z.B. in XML
<message>
line1..
line2..
line3..
</message>
zu senden, der Client muss dann nur schauen, ob die aktuelle Zeile gleich "</message>" ist,
dann darf </message> und ähnliche Token natürlich nicht im Text selber auftauchen, ansonsten wirds kompizierter

noch eine recht einfache Alternative: in der ersten Zeile nur eine Zahl senden,
5 für 'gleich kommen 5 Zeilen'


----------



## jupa (19. Feb 2008)

Hallo,

vielen Dank für deine Hilfe, ich habe eben einige Tests gemacht um das ganze besser zu verstehen.

Ich brauche eigentlich nur eine lokale SocketInstanz als Client welche dem Server Daten sendet.
Nachdem der Server die Daten verarbeitet hat soll er dem Clienten ein Feedbach geben.

Da das ja durchaus mehrere Linien sein können mache ich das ganze wie folgt.

while ((lInputLine = serverIn.readLine()) != null)
		            {
		                lAnswer = lAnswer + lInputLine;
		            }

Nachdem der Server dann eine oder mehrere Zeilen als Antwort gesendet hat teilt er mir das Ende durch die Close methode mit...

Nachdem die While Schleiffe im Clienten verlassen wurde schliesse ich dann auch hier mit Close die Verbindung...

Ich denke das ich so die beste Lösung vor mein Problem habe, oder???

Danke nochmal für deine Hilfe


----------



## SlaterB (19. Feb 2008)

wenn du danach keine neue Verbindung aufmachst,
dann ist das ein gutes Zeichen, dass du das close() richtig einsetzt


----------

