读取套接字服务器中的特殊字符

时间:2012-05-29 06:51:44

标签: java networking

我正在使用Java Networking API创建客户端/服务器。我的客户端将在消息之前和之后向服务器发送特殊的unicode字符。消息之前它将发送\uc001B并在消息\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;
   }
}

由于

1 个答案:

答案 0 :(得分:0)

您正在使用readLine().它删除换行符,无论它是什么:它了解所有换行符。你不可能知道换行符是什么。你也不可能在乎。您阅读的每一行都以换行符终止。但是,使用STX和ETX与Reader相关,你处于相当危险的境地。您似乎有一个协议定义问题:您发送STX / ETX和期待换行。为什么呢?