在Java中更快地ping服务器?

时间:2013-11-23 19:01:31

标签: java performance ip ping

我正在尝试查看列表中的IP实际在线状态。我正在使用

    public boolean IsOnline(String ip) { 
    try (Socket s = new Socket(ip, 80)) {
        return true;
    } catch (IOException ex) {
    }
    return false;
}

检查服务器是否在线。但每个IP需要大约30秒才能检查。有没有办法像另一种方法那样获得更快的结果?

3 个答案:

答案 0 :(得分:0)

不确定,但INetAddress.isReachable会满足您的需求吗?你不能用Java做ICMP消息。

答案 1 :(得分:0)

您可以使用INetAddress.isReachable

  

“..典型的实现将使用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来探测服务器是否存在。