我正在尝试从 TCP 流中读取客户端发送的消息。 事情是在读完最后一行后,我的 readline 函数没有返回 null,我无法调试原因,因为控制点丢失了。 简而言之,在读取最后一行后,readLine 函数应该返回 null,但我没有得到任何这样的东西。
这就是我的代码的样子
StringBuffer sipBuffer = null;
String lineRead = null;
readIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
try {
sipBuffer = new StringBuffer();
while ((lineRead = readIn.readLine()) != null) {
sipBuffer.append(lineRead);
sipBuffer.append("\n");
}
} catch (Exception ex) {
sipConsole.addText("Error in message: \n");
sipConsole.addText(ex.getMessage());
return;
}
消息格式为
String inviteReq = "INVITE sip:" + destIP + "@sip.umsy.edu SIP/2.0" + "\n"
+ "From: \"" + myName + "\" <sip:" + myIP + "@sip.umsy.edu>" + "\n"
+ "To: <sip:" + destIP + "@sip.umsy.edu>" + "\n"
+ "Allow: INVITE, ACK, BYE" + "\r\n";
最佳答案
客户端是否关闭了正在写入的流?如果没有,您的 readLine()
将阻止来自客户端的更多数据。客户端-服务器协议(protocol)通常建立一种机制(除了流关闭之外)来指示大小。无论是内容长度还是通过特殊 token 。
关于Java TCP 流终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716600/