我正在尝试在使用客户端和服务器发送聊天消息的简单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
答案 0 :(得分:4)
我能想到的唯一解释是:
in.readLine()
返回字符串"null"
(可能带有尾随空格),in
是指某些自定义流或阅读器包装,其readLine()
方法正在做一些奇怪的事情,或者你说:
“在退出循环之前,它似乎需要一段时间才能意识到它是空的。”
这是一个“伏都教编程”的解释。除非Java实现中存在错误,否则它可能不正确。这非常不太可能。
答案 1 :(得分:0)
好吧,看起来返回的null是在表单字符串中,这就是为什么它的行为方式。