2

サーバーと通信するための小さなクライアント アプリケーションを作成しています。クライアントとサーバーの間でソケットを開き、BufferedReader を使用してサーバーから送信されるものをすべて読み取ることができます。これはスレッドで読み取られます。ただし、BufferedReader を使用してソケットに書き込むと、何も起こりません。例外はありませんが、サーバーの応答はありません(サーバーの応答が必要です)これが私のコードです:

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

私のソケットは正しく開いており、mu BufferedWriter は正しく初期化されています:

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

なぜこれが機能しないのかわかりませんか?? どんな助けでも素晴らしいでしょう!よろしく

4

3 に答える 3

15

あなたのコードは正しいです。クライアントが送信するものは何でもエコーする汎用サーバーでテストしたところ、正常に動作しました(変更なし)。使用しているサーバーに問題がある可能性があります。私が気づいたことの 1 つは、サーバーが実際にデータを送信するために、出力ストリームに書き込むたびに改行文字を追加する必要があることでした。GUI が何も受信していないのはそのためだと思います。私のサーバーのクライアントスレッドクラスは次のとおりです。

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

        }
    }

}
于 2011-11-26T00:55:54.983 に答える
1

この時点では、クライアント コードが機能していないという説得力のある証拠はありません。特に、次のステートメント:

System.out.println(socketWritter.toString());

有益なことは何も教えてくれません。Stream オブジェクトのみの toString() メソッドは、ほとんどの場合、オブジェクトのクラス名とその ID ハッシュコードのみを通知します。ストリームに何を書き込んだかは確かにわかりません。

それを考えると、が機能していないという明確な証拠はflushありません。(問題はサーバー側にある可能性があります。)

于 2011-11-26T00:02:54.267 に答える
0

OutputStreamWriterなしでのみ使用BufferedWriterして使用するflush()

于 2018-05-19T13:46:44.490 に答える