Java 断开连接前返回null的服务器套接字输入流
我试图在一个简单的java应用程序中处理客户端断开连接的问题,该应用程序使用客户端和服务器发送聊天消息 问题出在这里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
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指针或引用。