我正在尝试在一个使用客户端和服务器发送聊天消息的简单 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/