2014-10-20 27 views
0

我使用下面的代碼來檢查網絡連接:Java的:通過平因特網連接檢查,以谷歌沒有工作

try { 
         HttpURLConnection httpConnection = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204").openConnection()); 
         httpConnection.setRequestProperty("User-Agent", "Test"); 
         httpConnection.setRequestProperty("Connection", "close"); 
         httpConnection.setConnectTimeout(15000); 
         httpConnection.connect(); 
         if (httpConnection.getResponseCode() == 204 && httpConnection.getContentLength() == 0){ 
         //internet is avialable 

          return; 
         }else{ 
          Log.e(TAG, "Internet connection error: " + httpConnection.getResponseCode() 
            + ": " + httpConnection.getResponseMessage()); 
         } 
        } catch (IOException e) { 
         Log.e(TAG, "Internet connection error: " + e); 
        } 

,我得到以下回應: 代碼:204 消息:沒有內容

但內容長度大於0,因此它失敗。 有人能幫我理解發生了什麼嗎?

感謝, 陽光

+0

我用Java 1.7_45運行你的例子,它按預期工作。 ? – morpheus05 2014-10-20 20:01:00

+0

在某些手機上的內容長度似乎不是0.是否可以接受? – Sunny 2014-10-20 20:02:09

+0

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html表示:「204響應絕不能包含消息體,因此總是由頭字段後面的第一個空行終止。 「也許這個換行符被視爲一些實現的內容? – morpheus05 2014-10-20 20:04:00

回答

0
根據要ping谷歌標題

,但您請求通過HTTP的站點,而這兩個東西是不一樣的。所以,如果你想在Android的訪問來ping這個帖子:How to Ping External IP from Java Android

+0

我其實只是想檢查是否有互聯網連接的手機上述代碼不起作用嗎? – Sunny 2014-10-20 20:12:22

+0

那麼,如果你得到服務器的迴應,那麼你有互聯網然而,如果它拋出一個錯誤或一個異常,那麼你根本就沒有互聯網 所以你可以使用你的代碼來檢查你是否有互聯網:) – jollyjoyce1995 2014-10-20 20:21:21

+0

哪一個是一個輕量級的,並根據你的android應用程序推薦。 – Sunny 2014-10-20 20:33:03

0

如果你信任你的Android設備,那麼你可以只使用此方法:

public boolean isOnline() { 
ConnectivityManager cm = 
    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
    return true; 
} 
return false; 

}

但是,如果你想這樣做你應該使用ping方法,因爲它比HTTP請求需要更少的資源。

上面的方法基本上提供了android系統,如果你有互聯網,如果你ping谷歌,那麼你只需要自己做

+0

這種方法的問題在於,它會檢測您是否連接到Wifi。但它將無法檢測到Wifi是否具有互聯網連接或沒有...因此這將無法正常工作 – Sunny 2014-10-20 20:55:43

0
public Boolean isOnline() { 
    try { 
     Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com"); 
     int returnVal = p1.waitFor(); 
     boolean reachable = (returnVal==0); 
     return reachable; 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return false; 
} 
+2

恭喜您的第一個答案。如果你解釋了你正在做的事情,而不僅僅是提供代碼轉儲,那麼質量就會提高。 – John3136 2017-08-19 23:35:12

相關問題