2012-12-06 66 views
5

SuperSocketというソケット変数を持っているとしたら、タイムアウト例外をキャッチできる方法はありますか?SocketTimeoutExceptionをキャッチするにはどうすればいいですか

 SuperSocket.setSoTimeout(5000); 

     catch (SocketTimeoutException e){ 
     System.out.println("Timeout"); 
     System.exit(1); 
    } 
+2

あなたは*それをキャッチしています。ここで何が問題なの? – EJP

+0

私のSpidey Senseは、OPが 'setSoTimeout'が何をするのか理解しておらず、あなたがタイムアウトして例外がスローされる可能性がある' Socket'を使って何か**する必要があると私に伝えていますそれをキャッチすることができます。 –

+0

@BrianRoachおそらく十分に良い推測です。私は自分自身を気にしない。 – EJP

答えて

4

あなたは、その例外がスローされるだろうというとき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つの引数バージョンを呼び出している場合にはだ一つの他の時間が実際にあります。