# while-Schleife funktioniert nicht bei Nachrichtempfang von Server



## MK234 (14. Sep 2011)

Hallo,

in meinem folgenden Programmausschnitt soll, nachdem eine Nachricht an einen Server geschickt wird, eine Antwort vom Server entgegen genommen werden, durch eine while-Schleife. Die while-Schleife befindet sich in einer run-Methode.


```
try {
	int zahl1 = x;
	int zahl2 = y;
	toServer.write(("move(x=" +y+";y="+x+")\r\n"));
	toServer.flush();							
	ini = "";
	line = "";						
							
	while((line = fromServer.readLine()) != null) {				
		ini = ini + line + newline;	
					
	}
	
		
							
	System.out.println("Jetzt kommt " +ini);
```

Zwar könnte ich die Zeichen von ini innerhalb der While-Schleife ausdrucken, aber nach dem verlassen
der Schleife hängt das Programm, d.h. der Befehl "System.out.println("Jetzt kommt " +ini)"  wird nicht mehr ausgeführt.

Wenn ich statt der while-Schleife, eine for-Schleife benutze wie z.B.

for(int i=0; i <= 4; i++) {
      line = fromServer.readLine();
      ini = ini + line + newline;
}

funktioniert das Programm. Jedoch ist diese for-Schleife nicht geeignet, weil ich nicht weiß wie viele Zeilen der Server jedesmal sendet.

Wenn ich stattdessen die for-Schleife wie folgt verwende:

for(line = ""; (line = fromServer.readLine()) != null {
        ini = ini + line + newline;
        System.out.println(line);
}

werden die Zeilen zwar innerhalb der for-Schleife ausgedruckt, aber nach verlassen der Schleife, hängt das Programm wieder.

Kennt jemand dieses Problem?


----------



## nillehammer (14. Sep 2011)

Ich glaube, dass Programm hängt, weil die Schleife nie verlassen wird. Das liegt daran, dass der Server nie mit etwas antwortet, dass als null interpretiert wird. Also entweder dafür sorgen, dass er das tut oder sich eine spezielle Zeichenfolge überlegen, die als Ende interpretiert wird und dann darauf testen.


----------



## TheRealSpikee (15. Sep 2011)

Egal von was für einem InputStream du liest ... NULL wird nur zurückgegeben wenn du versuchst von einem GESCHLOSSENEN Stream zu lesen ...
Die while() wird also erst nach closen des Streams verlassen. Das du das reading in einen Thread gesteckt hast ist schon mal gar nicht so verkehrt ...
Das Problem was du noch hast : du willst unendlich lange Daten vom Server lesen ... diese aber erst nach Beenden der Verbindung verarbeiten ... das ist falsch ! Die Verarbeitung der Daten muss innerhalb der while() stattfinden *meinet wegen über weitere Threads* ... aber nicht außerhalb da du bei einer "normalen" Verbindung erst nach Beendigung an diesen Punkt kommst.


----------



## MK234 (15. Sep 2011)

Danke für den Hinweis.

Werde jetzt versuchen die Daten innerhalb der while-Schleife zu verarbeiten.


----------

