我正在尝试查看列表中的IP实际在线状态。我正在使用
public boolean IsOnline(String ip) {
try (Socket s = new Socket(ip, 80)) {
return true;
} catch (IOException ex) {
}
return false;
}
检查服务器是否在线。但每个IP需要大约30秒才能检查。有没有办法像另一种方法那样获得更快的结果?
答案 0 :(得分:0)
不确定,但INetAddress.isReachable
会满足您的需求吗?你不能用Java做ICMP消息。
答案 1 :(得分:0)
“..典型的实现将使用ICMP ECHO REQUESTs,如果 可以获得特权,否则它将尝试建立TCP 目标主机的端口7(Echo)上的连接..“。
答案 2 :(得分:0)
我能想象的唯一原因,为什么这需要30秒,没有人听到端口80,你的套接字连接超时是30秒。请通过在catch子句中添加ex.printStackTrace()
来检查这一点。
请在此处阅读:Why are empty catch blocks a bad idea?
如何“ping”服务器,取决于它正在侦听的端口。通常INetAdresse.isReachable()
效果很好。如果管理员阻止ICMP请求,您可以使用ssh端口22来探测服务器是否存在。