java 测试网络连通性的两种方式
一、jdk自带的类
InetAddress address = InetAddress.getByName(hostname);
boolean flag = address.isReachable(timeout);
这种方法利用的echo服务
A typical implementation will use ICMP ECHO REQUESTs if the privilege can be obtained, otherwise it will try to establish a TCP connection on port 7 (Echo) of the destination host.
isReachable方法注释 运用的是icmp协议 ,echo服务是一种非常有用的用于调试和检测的工具。该协议接收到什么原样发回,是目的端口7的开通。
当连续的不停的去echo同一个ip时,会出现误报,使得断开的网络显示为连通,丢失准确性。
二、利用process
Process process=Runtime.getRuntime().exec("ping 127.0.0.1");
InputStream inputStream = process.getInputStream();//== null?process.getErrorStream():process.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "gbk"));
while ((nextLine = bufferedReader.readLine()) != null) {
if (nextLine.length() != 0) {
content = content + nextLine;
}
}
这种方法利用传统的ping模式,具有很高的稳定性。但缺点是速度比echo服务慢,当网络不通时,返回需要大量的时间。
当得到返回结果时,要注意销毁process
if (process != null) process.destroy();