Android中ping检测的使用

Ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定 网络故障
Ping发送一个ICMP (Internet Control Messages Protocol)即因特网信报控制协议,回声请求消息给目的地并报告是否收到所希望的 ICMP  echo (ICMP回声应答),用来检查网络是否通畅或者网络连接速度的命令。广义来说即发送一个数据包,根据返回的数据包得到丢包率及平均时间得出网络的连接状态。
ping命令可以用在android中检测网络ip或者socket的连接,命令格式:ping ip地址(最简)
ping具有一些参数,可以具体定义包的个数、包的最大存活时间等
-c 发送ICMP包的个数
-i 每次发送数据包中间的间隔时间,单位秒
-l <前置载入> 设置在送出要求信息之前,先行发出的数据包
-s 设置数据包的大小
-t 设置TTL(存活数值)的大小 / TTL : Time to Live 该字段指定IP包被路由器丢弃之前允许通过的最大网段数量
-w deadline 数据包存活最大时间
-W timeout 等待每个响应的最长时间,单位为秒

android ping检测ip地址或socket地址可使用两种方式:
一种是使用Runtime.getRuntime().exec()执行ping命令,根据方法返回值process是否连通判断连接状态
process 的 waitFor() 方法源码中的解释:

必要的情况下,此方法会使当前线程一直处于阻塞状态直到此执行进程从结果上表现出终止。此方法会在子进程被终止的时候立即返回值。如果子进程没有被终止,则当前线程一直阻塞到子进程退出。
return:一般来说 0 表示正常停止,即正常完成,未出现异常情况。列:
Process p = Runtime.getRuntime().exec("ping -c 1 -w 1 " + ipString);
// 读取ping的内容,可不加
InputStream input = p.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(input));
StringBuffer stringBuffer = new StringBuffer();
String content = "";
while ((content = in.readLine()) != null) {
    stringBuffer.append(content);
}
// PING的状态
int status = p.waitFor();
if (status == 0) {
   sleep(3000);
} else {
   isEnable = false;
   ExDispatcher.dispatchMessage(ExMessage.PING_CONNECT_BREAK);
   interrupt();
}

另一种使用ping命令中发包及包的丢失率判断通信的连接状态
Process process = Runtime.getRuntime().exec("ping "+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% loss")!=-1){  
   System.out.println("与 " +address +" 连接不畅通.");  
}  else{  
   System.out.println("与 " +address +" 连接畅通.");  
}  
正常的ping检测结果一般为:
====receive====:PING 192.168.43.159 (192.168.43.159) 56(84) bytes of data.
====receive====:64 bytes from 192.168.43.159: icmp_seq=1 ttl=64 time=73.8 ms
====receive====:64 bytes from 192.168.43.159: icmp_seq=2 ttl=64 time=91.4 ms
====receive====:64 bytes from 192.168.43.159: icmp_seq=3 ttl=64 time=1.18 ms
====receive====:64 bytes from 192.168.43.159: icmp_seq=4 ttl=64 time=139 ms
====receive====:--- 192.168.43.159 ping statistics ---
====receive====:4 packets transmitted, 4 received, 0% packet loss, time 3004ms

丢包率为100%时则网络为断开状态,上述结果显示发送为4个数据包,丢包率为0,连接正常





  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值