0

Java Networking API を使用してクライアント/サーバーを作成しています。私のクライアントは、メッセージの前後に特殊な Unicode 文字をサーバーに送信します。message の前に送信さ\uc001Bれ、 message の後に送信されます\uc00C。メッセージが正常に送信された後、クライアントは\rサーバーに送信します。サーバーはこれを受信することで、メッセージの送信が完了したことを識別できます。しかし、ここでの問題は、クライアントからのメッセージに\r.

DataOutputStream outToServer = new DataOutputStream( clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(
    clientSocket.getInputStream()));
outToServer.writeBytes("\uc001B");
outToServer.flush();
outToServer.writeBytes(message.toString());
outToServer.writeBytes("\uc001C");
outToServer.flush();
outToServer.writeBytes("\r");
outToServer.flush();

そして、これがクライアントからメッセージを読み取るための私のサーバーコードです

in = new BufferedReader(new InputStreamReader(m_clientSocket.getInputStream()));
out = new PrintWriter(new OutputStreamWriter(   m_clientSocket.getOutputStream()));
String receivingMessage = "";
while (m_bRunThread) {
   String clientCommand = in.readLine().toString();
   receivingMessage += clientCommand;
   System.out.println("Client Says :" + clientCommand);
   if (in.equals("\r")) {
      System.out.print("Message Receiving from Client Done : "+ m_clientID);
      m_bRunThread = false;
   }
}

ありがとう

4

1 に答える 1

0

あなたが使用しreadLine().ているのは、それが何であれ、改行を削除します:それはそれらすべてを理解します。エルゴあなたはおそらく改行文字が何であったかを知ることができません。また、あなたはおそらく気にすることはできません。読んだすべての行は、改行文字で終了しました。しかし、リーダーと組み合わせてSTXとETXを使用すると、かなり危険な状況になります。プロトコル定義に問題があるようです。STX/ETXを送信していて、改行期待しています。なんで?

于 2012-05-29T10:12:35.810 に答える