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から例外がスローされることはありません...