Android中的ping网络实现

  • 摘要:android中判断是否联网的那个方法在某些情况下是不可靠的,其实最可靠的就是ping当前的网络例如ping百度看下能不能ping通,能就代表网络正常,不能就表示网络不正常,以下就是ping的代码实现:publicstaticbooleanping(Stringhost,intpingCount,StringBufferstringBuffer){Stringline=null;Processprocess=null;BufferedReadersuccessReader=n
  • android中判断是否联网的那个方法在某些情况下是不可靠的,其实最可靠的就是ping当前的网络例如ping百度看下能不能ping通,能就代表网络正常,不能就表示网络不正常,以下就是ping的代码实现:

    public static boolean ping(String host, int pingCount, StringBuffer stringBuffer) { 
    String line = null; 
    Process process = null; 
    BufferedReader successReader = null; 
    // String command = "ping -c " + pingCount + " -w 5 " + host; 
    String command = "ping -c " + pingCount + " " + host; 
    boolean isSuccess = false; 
    try { 
    process = Runtime.getRuntime().exec(command); 
    if (process == null) { 
    LogUtil.e("ping fail:process is null."); 
    append(stringBuffer, "ping fail:process is null."); 
    return false; 

    successReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
    while ((line = successReader.readLine()) != null) { 
    LogUtil.i(line); 
    append(stringBuffer, line); 

    int status = process.waitFor(); 
    if (status == 0) { 
    LogUtil.i("exec cmd success:" + command); 
    append(stringBuffer, "exec cmd success:" + command); 
    isSuccess = true; 
    } else { 
    LogUtil.e("exec cmd fail."); 
    append(stringBuffer, "exec cmd fail."); 
    isSuccess = false; 

    LogUtil.i("exec finished."); 
    append(stringBuffer, "exec finished."); 
    } catch (IOException e) { 
    LogUtil.e(e); 
    } catch (InterruptedException e) { 
    LogUtil.e(e); 
    } finally { 
    LogUtil.i("ping exit."); 
    if (process != null) { 
    process.destroy(); 

    if (successReader != null) { 
    try { 
    successReader.close(); 
    } catch (IOException e) { 
    LogUtil.e(e); 



    return isSuccess; 

    private static void append(StringBuffer stringBuffer, String text) { 
    if (stringBuffer != null) { 
    stringBuffer.append(text + "/n"); 

    }

    ping返回true表示ping通,false表示没有ping通,所谓没有ping通是指数据包没有返回,也就是客户端没有及时收到ping的返回包因此返回false,但是要是网络不可用则ping的时候也会返回true,因为ping指定有成功结束,只是ping的返回包是失败的数据包而不是成功的数据包,所以准确的说返回true表示ping指定返回完成,false表示没收到ping的返回数据,以上方法是阻塞的,android系统默认等待ping的超时是10s,可以自定义超时时间,也不用担心方法一直被阻塞,经过实测,如果ping超时就会自动返回,因为不必担心方法被阻塞导致无法运行下面的代码,这个方法最终都会结束,网上的一些ping的实现说方法会被一直阻塞,实际上是他们ping的命令没写好,以及使用io被阻塞了

  • 以上是Android中的ping网络实现的内容,更多 Android 实现 网络 Ping 的内容,请您使用右上方搜索功能获取相关信息。

你可能感兴趣的:(Android中的ping网络实现)