0

JavaServerSocketを作成しました。ソケットオブジェクトを使用してリクエストを送信します。リクエストはServerSocketに配信されますが、レスポンスは返されません。

サーバーコード:

                Socket startserver = this.wifiserver.accept();

                in = new InputStreamReader(startserver.getInputStream());
                BufferedReader read = new BufferedReader(in);
                String request = read.readLine();
                //System.out.println(request);

                if(request.equals("SNDKEY")){
                    System.out.println("Command is: SNDKEY");
                    out = new PrintWriter(startserver.getOutputStream());
                    out.print("12345678901234567890");
                    out.close();

                }

クライアントコード:

        Socket connection = new Socket( ip, port );
        writeServer = new PrintWriter(connection.getOutputStream());
        inputStream = new InputStreamReader(connection.getInputStream());
        bufferStream = new BufferedReader(inputStream);
        writeServer.print("SNDKEY");


        this.Key = bufferStream.readLine();

問題は、プログラムがコマンドbufferStream.readLine()でスタックすることです。次の行コマンドを出力して、リクエストがサーバーに到達していることを確認しました:SNDKEYそしてそれは常に印刷されます。ただし、ユーザー側でキーが受信されることはありません。

4

1 に答える 1

1

bufferStream.readLine()改行が受信されるまでブロックします。ただし、サーバー側では、を使用して出力しますPrintWriter.print()。これは、指示しない限り改行を送信しません。したがって、クライアントは永遠に待機します。印刷をprintlnに変更するか、メッセージの最後に改行文字を追加します。

out.print("12345678901234567890\n"); 

プロトコルで改行を使用したくない場合は、代わりに、各バイトを読み取った後、または特定のバイト数を読み取った後に戻るbufferStream.read代わりに使用することができます。bufferStream.readLine

于 2012-10-01T14:41:14.840 に答える