3

次のコードがあります。ソケットでデータ テキストを送信しようとしています。しかし、 経由PrintWriterで送信しようとすると、クライアントは何もせず、 で停止しin.readLine()ます。ただし、単純に OutputStream を使用してバイトとして送信すると、クライアントは読み取りに問題はありません。私が望むようにすることは可能ですか?

        out = new PrintWriter(sock.getOutputStream());
        in = new BufferedReader(new InputStreamReader(sock.getInputStream()));

        while (true) {
            System.out.println("SERVER-THREAD: IP "
                    + sock.getInetAddress().getHostAddress());
            out.write(marshall() + "\n");
            Thread.sleep(1000);
        }

//クライアント

            in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
            out = new PrintWriter(sock.getOutputStream());

            while (updateList) {
                System.out.println("Before");
                String inputip = in.readLine();
                System.out.println("CLIENT: " + inputip);
                //unmarshall(in);
                System.out.println("After");
                Thread.sleep(1000);
            }
4

2 に答える 2

5

PrintWriter書き込むデータをバッファリングするため、バッファがいっぱいになるまで書き込みを行いません。ここでフラッシュを呼び出す必要があります

out.flush();
于 2012-12-01T13:34:29.073 に答える
3

readLine() を実行すると、行全体が読み取られるまで待機します。つまり、新しい行です。

あなたの送信は改行なしでテキストを送信しているため、受信は起こらない何かを待っています。

より基本的な問題は、テキストとバイナリを混在させていることです。これは、役立つよりも混乱する可能性が高いです。

BufferedReader.readLine() で読み取ることができる PrintWriter.println() でテキストを書くことをお勧めします。

于 2012-12-01T13:33:51.083 に答える