0

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またはRawConnectionの使用に欠けているものはありますか?

編集:それに加えて、2つのクライアントを実行し、最初のクライアントを閉じると、BufferedReaderから例外がスローされることはありません...

4

1 に答える 1

1

正常なシャットダウンの場合、IO 例外は発生しません。 in.readLine();その場合は null を返す必要があり、コードで処理する必要があります。

于 2012-05-04T07:21:10.487 に答える