0

我制作了一个客户端服务器聊天程序,但是由于某种原因,当我向服务器发送某些东西时,反之亦然,我收到了一个额外的空行

例如,如果客户端说“你好”,服务器就会收到 .... { client : hello client : } 这些是发送和接收函数

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();

    }



}



}
4

3 回答 3

0

第二次阅读似乎是 null 值,这会导致异常和 while 循环结束。相反,您应该使用以下 while 循环:

while ((message_in = in.readLine()) != null)
    ConversationBox.append("Client :"+message_in+"\n");
于 2012-08-26T21:39:37.850 回答
0

您的协议无法唯一标识消息的结尾。如果消息是“foo\nbar”,则将其发送为“foo\nbar\n”。由于接收方将换行符解释为消息分隔符,因此接收方将显示为两条消息,“foo”和“bar”。

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

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

  2. 如果消息包含换行符,请以某种方式对其进行转义并在接收器中检测到它。

否则,消息“Hello\n”将作为“Hello\n\n”传输并作为“Hello”接收,后跟一个空消息。

于 2012-08-26T21:47:56.847 回答
0

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

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

它工作正常

于 2012-08-27T14:10:11.857 回答