Java 如何检查计算机是否已连接到internet?

Java 如何检查计算机是否已连接到internet?,java,networking,Java,Networking,我已经看到这个问题以前在SO中被问过。一些线程是: 这些线都很旧了。此处定义的方法有: 通过openConnection()打开HttpURLConnection 正在检查InetAddress.isReachable 通过Process执行ping命令并处理输出 我已经看到,如果我使用第二种方法检查与www.google.com的连接,那么它将返回false,这不应该是结果。但第一种方法是有效的。我不能用最后一种方式,因为被告自己说了 我也看到了以下方式: private boo

我已经看到这个问题以前在SO中被问过。一些线程是:

这些线都很旧了。此处定义的方法有:

  • 通过
    openConnection()
    打开
    HttpURLConnection
  • 正在检查
    InetAddress.isReachable
  • 通过
    Process
    执行
    ping
    命令并处理输出
我已经看到,如果我使用第二种方法检查与
www.google.com
的连接,那么它将返回false,这不应该是结果。但第一种方法是有效的。我不能用最后一种方式,因为被告自己说了

我也看到了以下方式:

private boolean isConnected(Socket socket, String address) {
    if(socket == null) {
        throw new NullPointerException("Socket cannot be null");            
    }

    try {
        InetSocketAddress inetSocketAddress = new InetSocketAddress(address, 80);
        socket.connect(inetSocketAddress);
        return true;
    } catch (Throwable cause) {
        LOGGER.error(cause.getMessage(), cause);
        return false;
    }
}
通过这种方式,我得到了正确的输出。上述线程提到,没有正确的方法验证计算机是否连接到internet<但是由于这些线程是旧的,所以我希望能有一些新的方法来实现我想要的。我还必须考虑到访问局域网、宽带、拨号、DSL等各种方式,有些服务器可能会阻止ping访问,或者可以阻止一些IP。
任何指针都会非常有用

您可以使用NetworkInterface类,它有一个isUp()方法,该方法返回布尔值,指示特定接口是否已启动并正在运行(这可能指示它是否用于internet连接)


API:

一般来说,没有“连接到互联网”这样的东西。您只能检查您尝试访问的主机/端口组合(或IP地址)是否可访问。如果是,则不保证可以访问任何其他主机/端口。考虑一下像中国的防火墙这样的东西。你在那里时是否连接到“Internet”上?如果DNS服务器设置不正确,尝试连接到google.com可能会失败。而ping一个IP地址可能更安全。最好的选择是DNS服务器,它们很少更改IP地址,而且非常可靠。例如Google DNS:8.8.8.8。感谢您的回复。到目前为止,我知道NetworkInterface检查设备是否正常工作,而不是连接。可能是假阳性。是的,真的。虽然我发现这个网站(从一月份开始,相当新)有一些检查互联网连接的代码