socket.readLine()读取两次

时间:2012-08-26 21:33:30

标签: sockets readline

我做了一个客户端服务器聊天程序,但出于某种原因,当我向服务器发送内容或反之亦然时,我收到了一个额外的空行

例如,如果客户说"你好" 服务器收到.... { 客户:你好 客户: }      这些是发送和接收功能

public static void send(){
    out.println(message_out);

    }



public void read(){      


    try {
        while(true)
        {

        message_in = in.readLine();

            ConversationBox.append("Client :"+message_in+"\n");

        }
    } catch (IOException e) {

   System.out.println("Client disconnected!");
   e.printStackTrace();

    }



}



}

3 个答案:

答案 0 :(得分:0)

第二个读数似乎是空值,导致异常和while循环结束。相反,你应该使用以下while循环:

while ((message_in = in.readLine()) != null)
    ConversationBox.append("Client :"+message_in+"\n");

答案 1 :(得分:0)

您的协议无法唯一标识邮件的结尾。如果消息是“foo \ nbar”,则将其发送为“foo \ nbar \ n”。由于接收者将换行解释为消息分隔符,因此接收看起来是两条消息,“foo”然后是“bar”。

如果您要使用换行符作为邮件分隔符,则必须执行以下两项操作之一:

  1. 确保没有消息包含换行符。

  2. 如果邮件包含换行符,请以某种方式将其转义并在接收方中检测到。

  3. 否则,消息“Hello \ n”将作为“Hello \ n \ n”发送,并作为“Hello”接收,然后是空消息。

答案 2 :(得分:0)

好吧,大卫施瓦茨,我用过

if(message_in.isEmpty()){}
else
 ConversationBox.append("Server :"+message_in+"\n");

它工作正常