SuperSocket というソケット変数があるとします。タイムアウト例外をキャッチする方法はありますか?
SuperSocket.setSoTimeout(5000);
catch (SocketTimeoutException e){
System.out.println("Timeout");
System.exit(1);
}
SuperSocket というソケット変数があるとします。タイムアウト例外をキャッチする方法はありますか?
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 timeout)
は SocketException をスローしますミリ秒単位で指定されたタイムアウトで SO_TIMEOUT を有効/無効にします。このオプションをゼロ以外のタイムアウトに設定すると、この Socket に関連付けられた InputStream での read() 呼び出しは、この時間だけブロックされます。タイムアウトになると、Socket は引き続き有効ですが、java.net.SocketTimeoutException が発生します。このオプションを有効にするには、ブロッキング操作に入る前に有効にする必要があります。タイムアウトは > 0 でなければなりません。ゼロのタイムアウトは、無限のタイムアウトと解釈されます。
がスローされるSocketTimeoutException
(そしてキャッチされる) のは、Socket
の基になるブロックで読み取りを実行していてInputStream
、指定された時間内にデータが受信されない (読み取りが ... タイムアウトになる) 場合のみです。
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つの引数バージョンを呼び出している場合です。