PING (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议;回声请求消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答)。
它是用来检查网络是否通畅或者网络连接速度的命令。
原理:
利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,延时是多少。
使用Ping这命令来测试网络连通:
第一步
使用ipconfig观察本地网络设置是否正确。
第二步
cmd中输入 Ping 127.0.0.1 命令。
127.0.0.1 回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好。
第三步
cmd中输入 Ping本机IP地址 。
为了检查本机的IP地址是否设置有误。
第四步
cmd中输入 Ping本网网关或本网IP地址 (在非局域网中这一步骤可以忽略)
为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常。
第五步
cmd中输入 Ping远程IP地址。
这主要是检查本网或本机与外部的连接是否正常。
注意:
Ping 127.0.0.1:127.0.0.1是本地循环地址(如果不能正常连接,会阻塞线程)
如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作。
在安卓中使用:
public int executeCommand(final String command, final long timeout) throws IOException, InterruptedException, TimeoutException {
Process process = Runtime.getRuntime().exec("ping -c 3 "+command);
PingWorker worker = new PingWorker(process);
worker.start();
try {
// 先让worker线程执行一段时间
worker.join(timeout);
// 判断eixt是否存在,不存在的话抛出超时异常,
if (worker.exit != null){
return worker.exit;
} else{
throw new TimeoutException();
}
} catch (InterruptedException ex) {
worker.interrupt();
Thread.currentThread().interrupt()
throw ex;
} finally {
process.destroy();
}
}
private class PingWorker extends Thread{
private final Process process;
private Integer exit;
private PingWorker(Process process){
this.process = process;
}
@Override
public void run() {
try {
//这里容易阻塞线程
exit = process.waitFor();
} catch (InterruptedException e) {
return;
}
}
}
网友评论