Java outputStreamWriter flush reagiert nicht

interessanterweiße scheint flush() nicht richtig zu arbetien. Oder ich habe da etwas grundliegendes falsch verstanden.

Der code unten zeigt nur einen Teil des Codes. Ich kann der Socket leider noch nicht schließen. Hier würde seitens von java flush() aufgerufen werden was so dann auch funktioniert.

Die while(true){ } unten soll nur verhindern dass das prog. ans Ende kommt um zu zeigen das flush() nicht ausgeführt wird.

Beim „abschießen“ des programms in der cmd (Strg + c) wird der flush() jedoch wirksam.

Socket socket = new Socket(args[0], 2000);
BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( socket.getOutputStream() ) );

writer.write(args[1]);
writer.flush();

while(true){}

So nun die Frage: was mach ich falsch? ^^

* hiermit lese ich den Stream: ( wiegesagt: beim "abschießen und bei close() bekomme ich daten über den Stream)

ServerSocket serverSocket = new ServerSocket(2000);

Socket socket = serverSocket.accept();
BufferedReader reader = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );

String test = reader.readLine();
System.out.println("got file: "+ test);

HI,

du liest im Client ein ZEILE!.. wenn du

writer.write(args[1]+"\r");

nimmst, läuft es.

Also entweder nur Zeilenweise schreiben oder .read() in einer while Schleife benutzen

Gruß
Kenny21

Hallo,

der Serverteil deiner Software verwendet einen BufferedReader.
Dieser sammelt die Daten, die er vom Client empfängt.
Die Methode readLine wartet dabei bis zu einem Zeilenumbruch oder bis zum Ende der Übertragung, bis ein String zurückgegeben wird.

D.h. dass dein Client einfach noch einen Zeilenumbruch senden muss.

Übrigens vielleicht noch wichtig: Der Server ist bei einer solchen Verbindung für weitere Anfragen blockiert, da der Socket bis zum Ende der Übertragung des ersten Clients keine weiteren Anfragen entgegen nehmen kann. Also Client nicht zu lange offen halten oder den Port wechseln.

Was wird denn beim writer.write(args[1]) übergeben? Denn die Methode BufferedReader.readLine() versucht eine Zeile zu lesen. Wenn ich das richtig sehe, sendest du keinen Zeilenumbruch mit. Beim Ctrl+C wird der Stream geschlossen, deshalb bekommst du dann auch das Ergebnis.

Füg auf der Server-Seite mal die Zeile
writer.write(’\n’);
vor writer.flush() ein. Damit sollte es so funktionieren, wie du es dir gedacht hast.

Andreas