在Java中ping服务器更快?

在Java中ping服务器更快?,java,performance,ip,ping,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秒的时间来检查。是否有一种方法可以像另一种方法那样获得更快的结果?不确定,但

我想看看列表上的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消息。

您可以使用

“。如果 无法获得特权,否则将尝试建立TCP 目标主机的端口7(Echo)上的连接..”


我能想象的唯一原因,为什么这需要30秒,是因为没有人监听端口80,而您的套接字连接超时是30秒。请通过在catch子句中添加
例如printStackTrace()
来检查这一点

请在此阅读:


您应该如何“ping”服务器,取决于它正在侦听的端口。通常
INetAdresse.isReachable()
工作正常。如果管理员阻止ICMP请求,您可以使用ssh端口22来探测服务器是否存在。

此外,服务器可以在线,但不侦听端口80Java通常不使用ICMP请求
isReachable()
无论如何,它使用TCP端口7。