2 Stimmen

BufferedWriter und Socket in Java, Schreiben hat keine Wirkung

Ich schreibe eine kleine Client-Anwendung zur Kommunikation mit einem Server. Ich öffne einen Socket zwischen meinem Client und dem Server und kann alles, was vom Server ausgeht, mit einem BufferedReader lesen. Dies wird in einem Thread gelesen. Wenn ich jedoch mit einem BufferedReader auf den Socket schreibe, passiert nichts! Keine Ausnahme, aber auch keine Serverantwort (und es sollte eine Serverantwort geben) Hier ist mein Code:

socketWritter.write(message);
socketWritter.write("\n");
System.out.println(socketWritter.toString());
socketWritter.flush();

Mein Socket ist korrekt geöffnet und mu BufferedWriter korrekt initialisiert:

new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))

Ich habe keine Ahnung, warum das nicht funktioniert? Jede Hilfe wäre großartig! Mit freundlichen Grüßen

15voto

blackcompe Punkte 3178

Ihr Code ist korrekt. Ich habe ihn mit einem generischen Server getestet, der alles wiedergibt, was der Client sendet, und es hat gut funktioniert (ohne Änderungen). Es könnte sein, dass der von Ihnen verwendete Server fehlerhaft ist. Mir ist aufgefallen, dass ich bei meinem Server jedes Mal, wenn ich in den Ausgabestrom schrieb, ein neues Zeilenzeichen anhängen musste, damit die Daten tatsächlich gesendet wurden. Ich bin bereit zu wetten, dass das der Grund ist, warum Ihre GUI nichts empfängt. Hier ist die Client-Thread-Klasse von meinem Server:

class ClientThread extends Thread {

    private Socket          sock;
    private InputStream     in;
    private OutputStream    out;

    ClientThread( Socket sock ) {
        this.sock = sock;
        try {
            this.in = sock.getInputStream();
            this.out = sock.getOutputStream();
        } catch ( IOException e ) {
            e.printStackTrace();
        }
    }

    //Echos whatever the client sends to it
    public void run() {
        BufferedReader bufIn = new BufferedReader( new InputStreamReader( in ) );
        BufferedWriter bufOut = new BufferedWriter( new OutputStreamWriter( out ) );
        while ( true ) {
            try {
                String msg = bufIn.readLine();
                System.out.println( "Received: " + msg );
                bufOut.write( msg );
                bufOut.newLine(); //HERE!!!!!!
                bufOut.flush();
            } catch ( IOException e ) {
                e.printStackTrace();
            }

        }
    }

}

0voto

Alexmelyon Punkte 968

Nur verwenden OutputStreamWriter ohne BufferedWriter und verwenden flush()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X