Windows 7与XP GetIsNetworkAvailable()的区别?

时间:2012-06-14 14:27:08

标签: c# networking network-programming

我编写了代码,用机器上的可用IPv4 NICard填充菜单。它已经在XP机器上进行了测试,看起来一切都很好(它也是基于XP构建的)。

我在Windows 7上测试了它,即使一个断开连接,它总是填充2个IP地址。以下是Win7机器的结果:

WLAN已连接
LAN断开连接

观察:显示正确的WLAN地址,显示不正确的LAN地址(它甚至是连接到192.168的不同网络号,但菜单中填充的LAN地址是169.254)
预期:显示正确的WLAN地址,无LAN显示(已断开连接)
ipconfig为LAN
<读取“Media disconnected”

WLAN已连接
LAN已连接

观察:显示正确的WLAN地址,正确的LAN地址显示
预期:显示正确的WLAN地址,正确的LAN地址显示

ipconfig读取正确的地址

WLAN断开连接
LAN已连接

观察:显示正确的WLAN地址,正确的LAN地址显示
预期:没有显示WLAN地址(已断开连接),正确的LAN显示
ipconfig为WLAN

读取“Media disconnected”

这是代码块:

_adapters.Clear();
if (NetworkInterface.GetIsNetworkAvailable())
{
    NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();

    foreach (NetworkInterface adapter in networkInterfaces)
    {
        foreach (UnicastIPAddressInformation addr in adapter.GetIPProperties().UnicastAddresses)
        {
            //This filters out IPv6 and Loopback NICs
            if (addr.Address.AddressFamily == AddressFamily.InterNetwork
                && adapter.NetworkInterfaceType != NetworkInterfaceType.Loopback) 
            {    //This formats something like: 192.168.1.0 - Ethernet adapter Local Network Connection
                _adapters.Add(addr.Address.ToString() + " - " + adapter.NetworkInterfaceType.ToString() + " adapter " + adapter.Name);
            }
        }
    }
}

在VS2010上使用4.0 .NET实现其价值

1 个答案:

答案 0 :(得分:2)

要查看NIC是否已连接,您应该检查NetworkInterface.OperationalStatus属性。

LAN断开时的“奇怪”IP地址来自APIPA(自动专用IP寻址)。 Windows Vista引入的“功能”:

  

... Windows Vista中的一项功能,可在DHCP服务器不可用时使用IP地址和子网掩码自动配置自身。 IP地址范围是169.254.0.1到169.254.255.254,这是专门为Microsoft保留的范围。