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

时间:2012-02-22 06:05:02

标签: 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循环,而输入行不为null。如果它为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

2 个答案:

答案 0 :(得分:4)

我能想到的唯一解释是:

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

你说:

  

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

这是一个“伏都教编程”的解释。除非Java实现中存在错误,否则它可能不正确。这非常不太可能。

答案 1 :(得分:0)

好吧,看起来返回的null是在表单字符串中,这就是为什么它的行为方式。