我遇到一个问题,即当Telnet客户端断开连接时没有抛出IOException。
我使用了以下来源的服务器代码:
http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/Code/SocketThrdServer.java
从给定代码中,服务器应终止并在客户端关闭时显示“Read Fail”。但它不会发生在Telnet或Putty(RAW连接)上。相反,当我使用客户端给出的示例时,它可以正常工作。
我也尝试修改代码,以便readLine()不会一直阻塞I / O,而是使用超时。但是,它似乎没有帮助检测客户端是否已断开连接。
while (true) {
try {
client.setSoTimeout(1000);
line = in.readLine();
// Send data back to client
out.println(line);
textArea.append(line);
} catch (SocketTimeoutException ex) {
if(client.isClosed()) {
System.out.println("Client disconnected");
System.exit(-1);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Read failed");
System.exit(-1);
}
}
使用Telnet或Raw Connection是否缺少某些内容?
编辑:除此之外,当我运行2个客户端,然后关闭第一个客户端时,BufferedReader不会抛出任何异常......
答案 0 :(得分:1)
如果是正常关闭,则应该没有IO异常。
在这种情况下,in.readLine();
应该返回null,这是代码应该处理的情况。