2017-11-21 4 views
1

In meinem Java-Code, sende ich eine Zeichenfolge über Socket an einen anderen Stream.Java bufferedReader readline Schleife bricht nicht

Sender Code:

OutputStream out = socket.getOutputStream(); 
String u = new String("something as text"); 
PrintWriter p = new PrintWriter(out); 
p.print(resultMessage); 
p.flush(); 
p.print("\0"); 
p.flush(); 

Reciever Code:

String s; 
while ((s = br.readLine()) != null ) { 
    System.out.println(s); 
} 
System.out.println("DONE"); 

Das Problem besteht darin, dass die Daten nach dem Drucken sie empfangen, die while-Schleife nicht zu stoppen und wird in while ((s = br.readLine()) != null ) eintreffen. So druckt es nicht Done

+1

Das * sollte * funktionieren. Kannst du uns den Rest des 'br' Codes zeigen? – notyou

Antwort

2

Wenn Sie die Verbindung nicht schließen, gibt es keine end-of-stream und die andere Seite wird für immer warten (es sei denn, ein Lese-Timeout ist konfiguriert).

Wenn Sie alle benötigten Daten gesendet haben, schließen Sie den Socket. Andernfalls wartet das empfangende Ende auf andere Daten, die Sie möglicherweise senden.

Senden NUL (\0) tut nichts Besonderes, es wird auf jeden Fall nicht dazu führen, null von readLine() gelesen werden.

Wenn Sie weiterhin Daten hin- und herschicken möchten, wobei dazwischen etwas passiert, müssen Sie ein Protokoll erstellen (dh welche Art von Nachrichten wann gesendet werden) und Ihr Programm von Anfang an entwerfen Dort.

Verwandte Themen