Android中的ping网络实现
16lz
2021-01-23
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:view常用属性和操作方法
- 在android studio中用SQLiteOpenHelper()方法建立数据库
- Android中显示Dialog的方法
- 麦子学院android老师分享android实现listview异步加载图片的方法
- Android Volley.jar包下载(第三方开源网络通信框架)