2015-10-20 65 views
0

以下是一個Java應用程序,我試圖寫的一小部分:SocketTimeoutException表示爲不可達

Socket socket = new Socket(hostname, portnumber); 
DataInputStream socketInput = new DataInputStream(socket.getInputStream()); 
try{ 
    socket.setSoTimeout(10000); 
    try{ 
     byte[] msgHeader = new byte[4]; 
     if (socketInput.read(msgHeader) != -1) 
     { 
      // process message 
     } 
    } 
    catch (IOException e) 
    { 
     // process exception 
    } 
    catch (SocketTimeoutException ste) 
    { 
     // process exception 
    } 
} 
catch (SocketException se) 
{ 
    // process exception 
} 

我得到,指出捕獲錯誤(SocketTimeoutException)不可達。我想建立一個套接字超時以防止套接字read()永遠被阻塞,如果發生SocketTimeoutException,我的應用程序將嘗試建立到下一個可用服務器的套接字連接,並嘗試執行相同的read()操作。

提供的任何幫助非常感謝,因爲我嘗試過使用不同的IO類沒有成功。

回答

0

由於SocketTimeoutExceptionIOException的子類,所以控制永遠不會到達捕獲塊012.。異常將由IOException異常catch塊總能吸引 改變這些catch塊的位置:

catch (SocketTimeoutException e) 
    { 
     // process exception 
    } 
    catch (IOException ste) 
    { 
     // process exception 
    } 
+0

感謝您的快速回復/回覆。在審覈您的回覆/回覆並刪除我的問題之前,我意識到了我的問題。不過,我非常感謝您的回覆。 – rgwest61

0

the javadoc:SocketTimeoutException延伸IOException異常。所以,如果有人在try塊中拋出,它會被第一個catch塊捕獲,因此永遠不會到達第二個catch塊。

反轉兩個catch塊的順序,一切都應該沒問題。