私はソケット接続を使って回線を送信し、その後、サーバからの回線を45秒間待つソケットクライアントを作成しています。バッファ付きリーダーを使用してフルラインを読み取っている場合、ソケットのタイムアウトを設定することはできますか?
私はそうのようなバッファリングリーダー使用しています:私は次の行(またはそのようなもの)を追加した場合は何も持っていないと仮定して45秒後にどうなる
socket.setSoTimeout(45000);
を
Socket socket = null;
PrintWriter out = null;
BufferedReader in = null;
try {
socket = new Socket(host, 800);
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
} catch (UnknownHostException e) {
listener.failedToConnectToHost(e);
return;
} catch (IOException e) {
listener.failedToConnectToHost(e);
return;
}
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in));
out.println("message");
try {
String response = in.readLine();
listener.responseRecived(response);
return;
} catch (IOException e) {
listener.errorReadingResponse(e);
return;
}
をもう一端から来る?
私は中断された例外をキャッチしていると思いますが、私は確信していますか?
これは動作しますか? setSOTImeOut()のドキュメントは、タイムアウトするsocket.read()を意味します。バッファリングされた読者がスタックのどこかを呼び出していると仮定していますが、仮定はすべてのスクラップの母です。
あなたはそれを自分でテストしませんか?私はTCP connが閉じて、あなたはEOFExceptionを取得するだろうと思う。 –
@VictorSorokinなぜ接続が閉じますか? – EJP
'私は仮定します...'どのように正確にreadLine()*できない*ソケットから読み取ることによって進行することができますか? – EJP