Jer*_*ome 8 java ping inetaddress
我试图找出我的网络上的特定主机是否可访问.我的java代码如下:
InetAddress adr = InetAddress.getByName(host);
if(adr.isReachable(3000)){
System.out.println(host + " is reachable");
}
Run Code Online (Sandbox Code Playgroud)
这非常有效,但是如果我将超时降低到500毫秒,它将不再指定主机可达.我计划在循环中检查相当多的主机,因此具有低超时非常重要.如果我从Windows命令行手动ping主机,则需要不到10毫秒.
那么为什么Java方法需要更高的超时才能成功?有没有其他选择isReachable()?
这取决于你的可达性是什么意思.如果您只查找可侦测主机侦听特定端口的内容,则可以打开与该端口的套接字连接(例如,通过检查端口80查找所有HTTP服务器).使用InetAddress.isReachable()是依赖于实现的.根据javadoc,"典型的实现将使用ICMP ECHO REQUESTs".使用Java NIO(非阻塞I/O)的"已知端口"检查(如http(80),smb(445)等)可以具有更高的性能.我公司的产品使用"已知端口"扫描来查找运行Telnet或SSH的盒子,使用NIO,我们可以扫描大约5000 IP /秒.
| 归档时间: |
|
| 查看次数: |
8432 次 |
| 最近记录: |