17

をキャッチするときは、別の方法で処理する必要がありSocketTimeoutExceptionます。私が見つけた唯一のことは、に頼ることgetMessage()です。これまでのところ、次の 2 つを見つけました。

java.net.SocketTimeoutException: connect timed out
java.net.SocketTimeoutException: Read timed out

メッセージ (接続タイムアウト、読み取りタイムアウト) はハードコーディングされていますか? それらはどこで生成されますか?それらのメッセージの少なくとも定数値はありますか?

4

4 に答える 4

2

Socket.isConnected を確認できます。ただし、例外はさまざまなメソッドによってスローされるため、アクションが異なる 2 つの catch ブロックを使用することをお勧めします。

 try {
       socket.connect(address);
    } catch (SocketTimeoutException e) {
        throw new SocketConnectionException(e);
    }
    try {
       socket.getInputStream();
       ...
    } catch (SocketTimeoutException e) {
        throw new SocketReadException(e);
    } 
于 2013-03-01T20:23:18.747 に答える
1

それらはさまざまな方法から来ています。「接続タイムアウト」は、暗黙的または明示的に connect() を呼び出すときに発生します。「読み取りタイムアウト」は、read() またはその同族の 1 つを呼び出すときに発生します。したがって、2 つの異なる catch ブロックがあるだけで区別できます。しかし、どちらの場合でも、おそらく接続を閉じることになります...

于 2013-03-01T22:16:30.307 に答える