[英]Pinging a server faster in Java?
我正在尝试查看列表中的IP实际上是否在线。 我目前正在使用
public boolean IsOnline(String ip) {
try (Socket s = new Socket(ip, 80)) {
return true;
} catch (IOException ex) {
}
return false;
}
检查服务器是否在线。 但是检查每个IP大约需要30秒。 有没有办法像另一种方法那样获得更快的结果?
不确定,但是INetAddress.isReachable
可以满足您的需求? 您无法在Java中执行ICMP消息。
“如果可以获取特权,典型的实现将使用ICMP ECHO REQUEST,否则它将尝试在目标主机的端口7(Echo)上建立TCP连接。”
我可以想象的唯一原因是,没有人听80端口,而您的套接字连接超时是30秒,所以花费了30秒。 请通过在catch子句中添加ex.printStackTrace()
进行检查。
请在这里阅读: 为什么空捕获会阻止一个坏主意?
您应如何“ ping”服务器,取决于它正在侦听的端口。 通常, INetAdresse.isReachable()
可以正常工作。 如果管理员阻止了ICMP请求,则可以使用ssh端口22来探测服务器是否存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.