java outputStreamWriter flush reagiert nicht

Von: , 14.07.2010 17:35 Uhr

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);

3 Antworten zu dieser Frage

  1. Antwort von nach einer Stunde 0 hilfreich
    Re: java outputStreamWriter flush reagiert nicht

    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

  2. Antwort von nach 5 Stunden 0 hilfreich
    Re: java outputStreamWriter flush reagiert nicht

    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.

  3. Antwort von nach einem Tag 0 hilfreich
    Re: java outputStreamWriter flush reagiert nicht

    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

Jetzt auf diese Frage antworten.