2013-08-17 130 views
3

我有一個Java應用程序,每10分鐘運行一次。所以無論何時線程開始執行,我都必須檢查是否有互聯網連接。所以我爲此使用Socket類。但是這裏的問題是如果線路沒有連接到我的系統,套接字類就可以正常工作。對我來說,如果我插入電線,那麼我有局域網,但沒有互聯網。在這種情況下,套接字類無法引發錯誤。這裏是我的代碼 -在java中檢查互聯網連接

Socket socket = null; 
    try { 
     socket = new Socket("www.google.com", 80); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally {    
     if (socket != null) try { socket.close(); 

     } 
     catch(IOException e) { 
      e.printStackTrace(); 
     } 
     System.exit(0); 
    } 

我檢查了這裏的代碼 - Detect internet Connection using Java。但是使用getContent()並沒有幫助。

+0

與你的問題沒有關係,但你應該知道如果catch會調用'System.exit(0)'(至少在Java7中)'fi​​nally'部分不會被執行。 – Pshemo

回答

1

你試過了嗎?

boolean hasInternetAccess = InetAddress.getByName("www.google.com").isReachable(); 
+1

這總是返回false – Dan

1

您應該嘗試連接到您需要連接的任何設備,並在發生故障時處理故障。沒有神奇的成功預測指標。

0

兩個答案。 1.鏈接後面的代碼很好。您基本上需要從URL接收數據以確保它真的可以訪問。我會額外配置連接setUseCaches(false) 2.您的預先檢查不會幫助你。您仍然可以在程序中途斷開連接。所以,讓你的代碼運行。當它檢測到連接問題時,優雅地向用戶輸出錯誤。