Java 断开连接前返回null的服务器套接字输入流

Java 断开连接前返回null的服务器套接字输入流,java,sockets,while-loop,Java,Sockets,While Loop,我试图在一个简单的java应用程序中处理客户端断开连接的问题,该应用程序使用客户端和服务器发送聊天消息 问题出在这里 public void run() { try { System.out.println("Client Connected"); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println(i

我试图在一个简单的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();
    }

}
使用这里的代码,它在输入行不为null的情况下运行while循环。如果为null,则它将停止循环并关闭输入和输出流以及套接字。现在,除了控制台中的输出之外,这些都工作正常:

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

任何帮助都将不胜感激


shadrxninga

看来返回的null是字符串形式的,所以它的行为是这样的。

我能想到的唯一解释是:

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

“在退出循环之前,似乎需要一段时间才能意识到它是空的。”


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

in引用了以下内容:in=new BufferedReader(new InputStreamReader(socket.getInputStream());我知道我所说的是不可能的,这只是似乎正在发生的事情。代码正在执行,因为代码正在将信息打印到控制台。所以-我认为唯一可行的解决方案是您给我的第一个解决方案。好的。。。剩下第一个和第三个解释。@shadrxninga您可能需要同时检查
null
和字符串
“null”
。但是我认为最好研究一下为什么客户端发送字符串
“null”
,因为它表明客户端正在尝试使用null指针或引用。