java 测试网络连通性的两种方式

本文介绍了Java中检测网络连通性的两种方法:使用InetAddress的isReachable方法和通过执行ping命令。InetAddress的isReachable基于ICMP协议,可能存在误报问题;而ping命令虽然稳定但速度较慢。在实际应用中,需要根据需求权衡这两者的选择。
摘要由CSDN通过智能技术生成

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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值