【发布时间】:2012-06-17 14:41:21
【问题描述】:
我编写了代码以在计算机上使用可用的 IPv4 NIC 卡填充菜单。它已经在 XP 机器上进行了测试,看起来一切都很好(它也是基于 XP 构建的)。
我在 Windows 7 上对其进行了测试,它总是填充 2 个 IP 地址,即使其中一个已断开连接。以下是 Win7 机器的结果:
WLAN 已连接
局域网断开
观察到:显示正确的 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 物有所值
【问题讨论】:
-
标题似乎有点奇怪,因为这个问题与
GetIsNetworkAvailable无关,是吗? -
好吧,
GetIsNetworkAvailable()获取所有可用网络连接的接口。如果在 ipconfig 中读取“Media Disconnected”,则认为网络连接不可用不是很直观吗?也许它应该写成“GetIsNetworkCardAvailable()”,但这不取决于我,抱歉。 -
GetIsNetworkAvailable()返回一个布尔值 - 它表示是否有任何网络可用。您的所有示例都列出了至少一个网络可用的情况。
标签: c# networking network-programming