Java:通过ping进行互联网连接检查谷歌无法正常工作

时间:2014-10-20 19:52:18

标签: java android http http-status-code-204

我使用以下代码检查互联网连接:

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,因此失败。 有人可以帮我理解发生了什么吗?

谢谢, 晴天

3 个答案:

答案 0 :(得分:0)

根据您要ping谷歌的标题,但您通过HTTP请求网站,这两件事情是不一样的。因此,如果您想在Android中ping,请访问以下帖子:How to Ping External IP from Java Android

答案 1 :(得分: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谷歌,那么你只需要自己动手

答案 2 :(得分: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;
}