gpt4 book ai didi

Java InetAddress.isReachable() 超时

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:41 27 4
gpt4 key购买 nike

我试图查明我网络上的特定主机是否可以访问。我的java代码如下:

InetAddress adr = InetAddress.getByName(host);
if(adr.isReachable(3000)){
System.out.println(host + " is reachable");
}

这工作得很好,但是如果我将超时设置为 500 毫秒,它将不再指定主机可达。我计划循环检查不少主机,因此超时时间短非常重要。如果我从 Windows 命令行手动 ping 主机,它需要不到 10 毫秒。

那么为什么 Java 方法需要更高的超时才能成功呢?除了使用 isReachable() 之外,还有其他选择吗?

最佳答案

这取决于您所说的可达性。如果您只找到在特定端口上监听的可访问主机,则可以打开到该端口的套接字连接(例如,通过检查端口 80 查找所有 HTTP 服务器)。使用 InetAddress.isReachable() 取决于实现。根据 javadoc,“典型的实现将使用 ICMP ECHO REQUEST”。使用 Java NIO(非阻塞 I/O)的“已知端口”检查(如 http(80)、smb(445) 等)可以具有更高的性能。我公司有一个产品使用“已知端口”扫描来查找运行 Telnet 或 SSH 的盒子,使用 NIO,我们可以扫描大约 5000 个 IP/秒。

关于Java InetAddress.isReachable() 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9555549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com