我做了一个客户端服务器聊天程序,但出于某种原因,当我向服务器发送内容或反之亦然时,我收到了一个额外的空行
例如,如果客户说"你好" 服务器收到.... { 客户:你好 客户: } 这些是发送和接收功能
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();
}
}
}
答案 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”。
如果您要使用换行符作为邮件分隔符,则必须执行以下两项操作之一:
确保没有消息包含换行符。
如果邮件包含换行符,请以某种方式将其转义并在接收方中检测到。
否则,消息“Hello \ n”将作为“Hello \ n \ n”发送,并作为“Hello”接收,然后是空消息。
答案 2 :(得分:0)
if(message_in.isEmpty()){}
else
ConversationBox.append("Server :"+message_in+"\n");
它工作正常