java - 如何检查电脑是否已连接到互联网?

标签 java networking

我看到这个问题以前在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;
    }
}

通过这种方式我得到了正确的输出。上述线程提到没有正确的方法来验证计算机是否连接到互联网。 但是由于这些线程已经很旧了,所以我希望可能有一些新的方法可以实现我想要的。此外,我还必须考虑有多种方法可以访问互联网(例如 LAN),宽带、拨号、DSL 等,某些服务器可能会阻止 ping 访问或阻止某些 IP。

任何指针都会非常有帮助。

最佳答案

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

API:http://docs.oracle.com/javase/7/docs/api/java/net/NetworkInterface.html

关于java - 如何检查电脑是否已连接到互联网?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23218830/

相关文章:

java - Zookeeper集群如何实现2pc?

java - Java RabbitMQ 客户端中的ConfirmListener是否必须同步?

linux - Docker设置ipaddress并启动服务

language-agnostic - 收听多播如何伤害我?

java - 屏幕上的按钮不会将我切换到游戏 Pane

java - 如何向MongoDb中的子数据插入数据?

networking - 如何从访客计算机访问主机?

python - 在 Python/Scapy 网络扫描仪中通过 MAC 地址过滤/标记设备识别的打印结果

networking - 局域网带宽控制

java - Azure - HDInsight Hbase 数据插入失败