当telnet关闭时,BufferedReader或Socket不会抛出异常

时间:2012-05-04 07:14:34

标签: java sockets bufferedreader

我遇到一个问题,即当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不会抛出任何异常......

1 个答案:

答案 0 :(得分:1)

如果是正常关闭,则应该没有IO异常。 在这种情况下,in.readLine();应该返回null,这是代码应该处理的情况。