Java TCP 流终止

标签 java tcp

我正在尝试从 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/

相关文章:

java - 启动 Java 应用程序时出现错误 : Exception thrown by the agent : java. lang.NullPointerException

java - 无法在 Android 中使用 Selenium 依赖项(在纯 Java 中工作)

java - 从 SQL 中同一行的另一列获取值

c - TCP 客户端-服务器 "bad address"错误(在 C 中)

java - 为什么像 Skype 这样的程序不需要您打开端口?

java - Netty 帧解码器在多条消息上损坏

sockets - 通过共享公共(public) IP 地址的客户端服务器?

java - Spring JPA Repository - 在服务器重启时保留数据

java - 无需单击按钮即可动态添加组件

c++ - 客户端和服务器无法交换数据,因为都得到 "stuck"