【发布时间】:2012-05-04 07:14:34
【问题描述】:
我有一个问题,当 Telnet 客户端断开连接时没有抛出 IOException。
我使用了以下来源的服务器代码:
http://java.sun.com/developer/onlineTraining/Programming/BasicJava2/Code/SocketThrdServer.java
根据给定的代码,当客户端关闭时,服务器应该终止并显示“读取失败”。但是 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 不会抛出异常...
【问题讨论】:
标签: java sockets bufferedreader