首页 > Java > java教程 > 为什么 Ping 成功后 InetAddress.isReachable() 有时也会返回 False?

为什么 Ping 成功后 InetAddress.isReachable() 有时也会返回 False?

Barbara Streisand
发布: 2024-12-02 09:18:10
原创
633 人浏览过

Why Does InetAddress.isReachable() Sometimes Return False Even When Ping Succeeds?

揭示断开连接:为什么 InetAddress.isReachable() 报告错误

尝试使用 InetAddress.isReachable 确定 IP 地址的可达性时(),尽管能够成功 ping 同一地址,但用户可能会遇到意外的错误响应。这种差异可归因于 isReachable() 实现的限制。

与直接向目标 IP 发送网络数据包的 ping 不同,isReachable() 依赖于一种称为 ICMP(Internet控制消息协议)回显请求。如果在指定的超时时间内未响应 ICMP 请求,即使 IP 仍然可访问,isReachable() 也会返回 false。

提供跨平台解决方案

对于包含一系列连接检查的独立于平台的解决方案,请考虑采用探测目标计算机上开放端口的技术。这种方法利用了这样一个事实:大多数设备都拥有 SSH、Web 服务器或邮件服务器等服务的开放端口。

以下是实现此方法的代码片段:

private static boolean isReachable(String addr, int openPort, int timeOutMillis) {
    // Any Open port on other machine
    // openPort =  22 - ssh, 80 or 443 - webserver, 25 - mailserver etc.
    try (Socket soc = new Socket()) {
        soc.connect(new InetSocketAddress(addr, openPort), timeOutMillis);
        return true;
    } catch (IOException ex) {
        return false;
    }
}
登录后复制

通过利用通过这种技术,您能够确定可达性,而不管底层平台如何,从而确保结果更加一致。

以上是为什么 Ping 成功后 InetAddress.isReachable() 有时也会返回 False?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板