SuperSocketというソケット変数を持っているとしたら、タイムアウト例外をキャッチできる方法はありますか?SocketTimeoutExceptionをキャッチするにはどうすればいいですか
SuperSocket.setSoTimeout(5000);
catch (SocketTimeoutException e){
System.out.println("Timeout");
System.exit(1);
}
SuperSocketというソケット変数を持っているとしたら、タイムアウト例外をキャッチできる方法はありますか?SocketTimeoutExceptionをキャッチするにはどうすればいいですか
SuperSocket.setSoTimeout(5000);
catch (SocketTimeoutException e){
System.out.println("Timeout");
System.exit(1);
}
あなたは、その例外がスローされるだろうというときsetSoTimeout()
が何をするのか理解していないように見えます。 Javadocのから
:(http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html)
ます。public void setSoTimeout(int型のタイムアウト)
は、SocketExceptionがはミリ秒単位で指定されたタイムアウトと/無効SO_TIMEOUTを有効にスローされます。 このオプションをゼロ以外のタイムアウトに設定すると、このソケットに関連付けられた InputStreamのread()コールは、この 時間だけブロックされます。タイムアウトが終了すると、 java.net.SocketTimeoutExceptionが発生しますが、Socketはまだ有効です。 が有効です。このオプションは、ブロッキング 操作を有効にする前に有効にする必要があります。タイムアウトは> 0でなければなりません。ゼロのタイムアウトは は無限のタイムアウトとして解釈されます。あなたは
Socket
さんはInputStream
の基礎となると、データが指定した時間内に受信されないで読んブロッキングをやっているときSocketTimeoutException
がスロー(その後、キャッチ)することができる唯一の時間がある
(への読み込みが発生します。 .. タイムアウト)。
superSocket.setSoTimeout(5000);
InputStream is = superSocket.getInputStream();
int i;
try {
i = is.read();
} catch (SocketTimeoutException ste) {
System.out.println("I timed out!");
}
編集追加する:を例外がスローされる可能性がある、とあなたがタイムアウトを供給Socket.connect()
の2つの引数バージョンを呼び出している場合にはだ一つの他の時間が実際にあります。
あなたは*それをキャッチしています。ここで何が問題なの? – EJP
私のSpidey Senseは、OPが 'setSoTimeout'が何をするのか理解しておらず、あなたがタイムアウトして例外がスローされる可能性がある' Socket'を使って何か**する必要があると私に伝えていますそれをキャッチすることができます。 –
@BrianRoachおそらく十分に良い推測です。私は自分自身を気にしない。 – EJP