Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows 7与XP GetIsNetworkAvailable()的区别?_C#_Networking_Network Programming - Fatal编程技术网

C# Windows 7与XP GetIsNetworkAvailable()的区别?

C# Windows 7与XP GetIsNetworkAvailable()的区别?,c#,networking,network-programming,C#,Networking,Network Programming,我编写了代码,用计算机上可用的IPv4网卡填充菜单。它已经在XP机器上进行了测试,看起来一切都很好(它也是基于XP构建的) 我在Windows7上测试过它,它总是填充2个IP地址,即使其中一个断开连接。以下是Win7计算机的结果: 已连接WLAN LAN已断开连接 观察到:显示正确的WLAN地址,显示不正确的LAN地址(它甚至是连接到192.168的另一个网络号,但菜单中填充的LAN地址是169.254) 预期:显示正确的WLAN地址,没有显示LAN(已断开连接) ipconfig读取LAN的“

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

我在Windows7上测试过它,它总是填充2个IP地址,即使其中一个断开连接。以下是Win7计算机的结果:

已连接WLAN
LAN已断开连接

观察到:显示正确的WLAN地址,显示不正确的LAN地址(它甚至是连接到192.168的另一个网络号,但菜单中填充的LAN地址是169.254)
预期:显示正确的WLAN地址,没有显示LAN(已断开连接)
ipconfig读取LAN的“媒体断开连接”

已连接WLAN
局域网已连接

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

ipconfig读取正确的地址

WLAN已断开连接
局域网已连接

观察到:显示正确的WLAN地址,显示正确的LAN地址
预期:没有显示WLAN地址(已断开连接),正确的LAN显示
ipconfig读取WLAN的“媒体已断开连接”

下面是代码块:

_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查看其价值要查看NIC是否已连接,您应该检查
NetworkInterface.OperationalStatus
属性

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

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


标题似乎有点奇怪,因为这个问题实际上与
GetIsNetworkAvailable
无关,是吗?好的
GetIsNetworkAvailable()
get是所有可以使用网络连接的接口。如果ipconfig中显示“Media Disconnected”,那么认为网络连接不可用不是很直观吗?也许它应该写为“GetIsNetworkCardAvailable()”,但这不取决于我,对不起。
GetIsNetworkAvailable()
返回一个布尔值-它表示是否有任何网络可用。您的所有示例都列出了至少有一个网络可用的情况。Microsoft使用术语APIPA,但IPV4中使用169.254.0.0/16,IPV6中使用fe80::/64更一般地称为链路本地地址。(MS是原始RFC的作者之一,但说这个范围是“专为”他们保留的,这有点夸张。请参见和)。另外,根据RFC,Win98支持本地链接。感谢您提供的信息。现在的问题是:使用
NetworkInterface.OperationalStatus
还是解析并排除169.254个地址——或者它们是可互换的?@LynnCrumbling这是TechNet的一句话……它们有点……以自我为中心!LOL@klut169.254.x.x甚至可以是一个有效的地址(没有DHCP),但可以运行(这并不意味着NIC断开了连接)。@Adriano:啊,我很好奇你从哪里得到的。