java - 服务器套接字输入流在断开连接之前返回 null

标签 java sockets while-loop

我正在尝试在一个使用客户端和服务器发送聊天消息的简单 Java 应用程序中处理客户端断开连接的问题。

问题来了

public void run() {
    try {
        System.out.println("Client Connected");
        String inputLine;

        while ((inputLine = in.readLine()) != null) {
            System.out.println(inputLine);
            theServer.handle(inputLine, this);
        }
        out.close();
        in.close();
        socket.close();
        System.out.println("Client Disconnected");

    } catch (Exception e) {
        e.printStackTrace();
    }

}

这里使用这段代码,它在输入行不为空时运行 while 循环。如果它为空,那么它将停止循环并关闭输入流和输出流以及套接字。现在,除了控制台中的输出是这样之外,这一切都工作正常:

Client Connected
null
Client(/127.0.0.1): null
null
Client(/127.0.0.1): null
null
Client(/127.0.0.1): null
null
Client(/127.0.0.1): null
Client Disconnected

我不明白为什么即使输入为空,循环也会继续循环!!在退出循环之前似乎需要一段时间才能意识到它是空的。我需要它立即退出。

如有任何帮助,我们将不胜感激

沙德宁加

最佳答案

我能想到的唯一解释是:

  • in.readLine() 正在返回字符串 "null"(可能带有尾随空格),
  • in 指的是一些自定义流或读取器包装器,其 readLine() 方法正在做一些奇怪的事情,或者
  • 这不是您实际执行的代码。

你说:

"It seems to take a while to realise that it's null before exiting the loop."

这是一个“巫术编程”的解释。除非您的 Java 实现中存在错误,否则它不可能是正确的。这是不可能的。

关于java - 服务器套接字输入流在断开连接之前返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9389867/

相关文章:

sockets - 套接字/HTTP 请求

java - While 循环在提示前执行一次

java - bufferedreader - 读入 stringbuffer 而不是 string

c - While 循环条件不满足

java - SoapUI 或 WSDL2Java 无法读取由 Axis2 服务生成的 WSDL

c - 意外的多线程服务器 react - C

java - 打印不带填充的 BinaryString

C UDP套接字: Arbitrary setsockopt behavior (with SO_RCVTIMEO)

java - javafx 中的图像

java - (Java 7 NIO.2) 监视服务线程的自定义名称