Input/Output streams und readLine()

darkeye2

Bekanntes Mitglied
Hallo,

ich habe mal ein programm geschrieben, dass sowohl eine serveranwendung als auch clienten hat, die sich eben mit dem server verbinden können.

Nun hab ich seit langem ein update geplant und hab dafür den clienten in ein paar punkten überarbeitet, und dabei hat sich scheinbar ein denkfehler eingeschlichen, weil ich am code selbst keinen fehler sehe, und auch keinen ausgegeben kriege.

Meine Serveranwendung sendet ein paar zeilen, das sieht so aus:
Java:
BufferedReader br = new BufferedReader(new InputStreamReader(vsrc.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(vsrc.getOutputStream()));

bw.write("Hello, "+lg.RLNAME+" "+lg.RLVERSION+" is Running!\r\n");
bw.flush();

vom clienten soll diese zeile nun empfangen werden:

Java:
//answer ist ein StringBuilder und ui.addDisc(String, HTMLTag) gibt mir in einen fenster
//den gesünschten string aus
while((buf = br.readLine())!= null){
	ui.addDisc("<b>answer : "+buf+"</b>", Tag.B);
	answer.append(buf);
}
ui.addDisc("<b>Test sendCmd answer</b>", Tag.B);

und erfolgt die ausgabe, die nach der while schleife kommt, nie. und die while schleife wird auch nur einmal ausgeführt (was in dem fall auch stimmt, auch der text, der mir beim ersten schleifendurchgang ausgegeben wird stimmt) nur hört es irgendwie nicht auf, bleibt wohl irgendwie beim zweiten mal beim readLine hängen .... (gibt keine fehlermeldung)
 
besteht denn nun eine Frage? was bei dir der Denkfehler ist scheint ja als Rätsel für den Leser angelegt 😉

soll Zeile 7 öfter drankommen als erst zum Ende der Verbindung?
sende z.B. nach jedem Block aus Zeilen eine Zeile "Ende Block" und breche die Schleife ab wenn diese Zeile kommt
 
ja, die frage ist, wieso die schleife nicht abgebrochen wird, wenn keine daten mehr nachkommen? Zeile 7 soll eben dann ausgeführt werden, wenn keine daten mehr kommen, sprich alles übertragen wurde. Aber in meinen fall wird zeile 7 nie ausgefüht, und die while schleife laut der ausgabe darin, auch nur einmal aufgerufen, und obwohl keine weiteren daten mehr kommen, scheint die readLine() methode weiter zu warten.
 
es gibt keine Wünsche auf Welt, etwa dass Papier zu Geld wird wenn man es grün anmalt,

readLine() hat ein konkretes Verhalten und danach musst du dich richten, Rückgabwert null steht für Ende des Streams,
ansonsten wird auf die nächste vollständige Zeile gewartet (schöner Fehler wenn man vergisst Zeilenumbruch zu senden),
so ist das nunmal
 

Neue Themen


Zurück
Oben