如何解决为什么我从对GetIPv4Properties的调用中获得了NullReferenceException
注意:我知道NullReferenceException
是什么以及如何调试和查找它的来源-这不是这里的问题
我的目标:对于Unity3D中的一个项目,我试图找到我所有设备的网络接口并将它们的IpAddress
存储在列表中以备后用。稍后,我将在所有这些消息上广播一些消息。
除其他外,我关注了How do I get the network interface and its right IPv4 address?和Broadcasting UDP message to all the available network cards(尤其是this answer),并尝试提出以下建议:
var addresses = new List<IPAddress>();
var allNetworkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (var networkInterface in allNetworkInterfaces)
{
if (networkInterface.OperationalStatus != OperationalStatus.Up) continue;
if (networkInterface.NetworkInterfaceType != NetworkInterfaceType.Wireless80211 && networkInterface.NetworkInterfaceType != NetworkInterfaceType.Ethernet)continue;
if (!networkInterface.SupportsMulticast) continue;
if (networkInterface.Supports(NetworkInterfaceComponent.IPv4) == false) continue;
var ipProperties = networkInterface.GetIPProperties();
if (ipProperties == null) continue;
var ipv4Properties = ipProperties.GetIPv4Properties(); // !! EXCEPTION IS THROWN HERE !!
if (ipv4Properties == null) continue;
if (NetworkInterface.LoopbackInterfaceIndex == ipv4Properties.Index) continue;
var unicastAddresses = ipProperties.UnicastAddresses;
foreach (var unicastIpAddressinformation in unicastAddresses)
{
if (unicastIpAddressinformation.Address.AddressFamily != AddressFamily.InterNetwork) continue;
addresses.Add(unicastIpAddressinformation.Address);
}
}
// and yes I used Linq before but I converted it to the loop due to debug the exception ^^
例外
System.NullReferenceException:对象引用未设置为对象的实例
位于(包装由本机托管)System.Net.networkinformation.Win32IPv4InterfaceProperties.GetPerAdapterInfo(int,System.Net.networkinformation.Win32_IP_PER_ADAPTER_INFO,int&)
at System.Net.networkinformation.Win32IPv4InterfaceProperties..ctor(System.Net.networkinformation.Win32_IP_ADAPTER_ADDRESSES addr,System.Net.networkinformation.Win32_MIB_IFROW mib)[0x00030]在中
在System.Net.networkinformation.Win32IPInterfaceProperties2.GetIPv4Properties()[0x00000]在:0中
在C:\ xxxxxx \ broadcast.cs:797中的broadcast.broadCastTest(System.UInt16 broadcastPort,System.Net.sockets.UdpClient客户端)[0x000ae]
被扔进去
var ipv4Properties = ipProperties.GetIPv4Properties();
其中ipProperties
是不是 null
,因此显然它来自GetIPv4Properties
内部的某个地方。 API中列出的唯一可能引发的异常是networkinformationException
,而不是NullReferenceException
。
也是在我检查并确认之前
networkInterface.Supports(NetworkInterfaceComponent.IPv4)
是true
(这是我的以太网接口,因此显然是IPv4接口)。
那为什么会引发异常,我该如何解决呢?
我在做蠢事吗? ^^
更新
遵循原理,通过注释掉它来解决它,我现在只是跳过loopBack检查
// var ipv4Properties = ipProperties.GetIPv4Properties();
// if (ipv4Properties == null) continue;
// if (NetworkInterface.LoopbackInterfaceIndex == ipv4Properties.Index) continue;
自从afaik以来,回环应该已经被覆盖
networkInterface.NetworkInterfaceType != NetworkInterfaceType.Loopback
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。