如何在没有延迟的情况下检测网卡是否未与Java连接?

时间:2011-08-19 13:20:20

标签: java api network-programming

Java中有一个API(NetworkInterface,InetAddress等),我可以通过它检测到网卡没有连接。

问题是,解决某些网络API有一个很大的超时。但如果网卡没有连接任何电缆,我们可以跳过它。问题似乎只发生在Windows 7上。

2 个答案:

答案 0 :(得分:2)

我有同样的问题。我最终使用了这个:

Enumeration<NetworkInterface> eni = NetworkInterface.getNetworkInterfaces();
        while(eni.hasMoreElements()) {
            Enumeration<InetAddress> eia = eni.nextElement().getInetAddresses();
            while(eia.hasMoreElements()) {
                InetAddress ia = eia.nextElement();
                if (!ia.isAnyLocalAddress() && !ia.isLoopbackAddress() && !ia.isSiteLocalAddress()) {
                    if (!ia.getHostName().equals(ia.getHostAddress()))
                        return true;
                }
            }
        }

适用于Java 5+。还间接检查DNS(通过比较名称/地址)。

答案 1 :(得分:1)

您可以使用一些java系统属性来设置使用

进行套接字连接的默认超时时间
sun.net.client.defaultConnectTimeout

all properties here

但在我看来,检查特定的介质访问控制器是否存在是底层操作系统的工作。我不能告诉你很多关于Windows 7的问题,我从12年后开始使用一个好的操作系统(linux)。

此致  斯特凡