网上有的说 是android 但命令是windows 的,ping的命令 windows 和linux 以及android 的参数含义会稍有不同,而恰巧会影响这个判断:
先看网上的第一种写法:
有几个问题, -n 次数 -w deadline时长, linux 中次数用的是 -c ,android 中 参数在前,ip在后面 。
所以经过摸索,我修改了一版。如下
这样还不行,in读取的是null的
然后我在网上搜到了这样的版本:
他这个也有问题,划线的两个问题, ping命令 android 还一直执行,阻塞线程,要用参数,第二个划线的字符串不对,实测 应该是我下面的那个字符串,最后付一个最终版本:
public static boolean ping2(String address, int pingTimes, int timeOut) {
Process process = null;
try {
process = Runtime.getRuntime().exec( "ping " + "-c " + pingTimes + " -w " + timeOut+ " "+address);
InputStreamReader r = new InputStreamReader(process.getInputStream());
LineNumberReader returnData = new LineNumberReader(r);
String returnMsg="";
String line = "";
while ((line = returnData.readLine()) != null) {
System.out.println(line);
returnMsg += line;
}
if(returnMsg.indexOf("100% packet loss")!=-1){
System.out.println("与 " +address +" 连接不畅通.");
return false;
} else{
System.out.println("与 " +address +" 连接畅通.");
return true;
}
} catch (IOException e) {
e.printStackTrace();
}
return false;
}