Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
Ios 调用Dns.GetHostAddresses(Dns.GetHostName())时无法解决主机异常_Ios_.net_Dns_Xamarin_Upnp - Fatal编程技术网

Ios 调用Dns.GetHostAddresses(Dns.GetHostName())时无法解决主机异常

Ios 调用Dns.GetHostAddresses(Dns.GetHostName())时无法解决主机异常,ios,.net,dns,xamarin,upnp,Ios,.net,Dns,Xamarin,Upnp,因此,我正在使用Xamarin和.net在一个iOS项目中实现uPNP。我一直在努力为本地设备(即运行程序的设备)获取有效的本地ip地址 我曾尝试使用NetworkInterface.GetAllNetworkInterfaces(),但Xamarin对该方法的实现中有一个bug,它不起作用 所以,我环顾四周,找到了一个简单的方法来实现这一点。我尝试了以下方法: IPAddress[] hostAddresses = Dns.GetHostAddresses(Dns.GetHostName())

因此,我正在使用Xamarin和.net在一个iOS项目中实现uPNP。我一直在努力为本地设备(即运行程序的设备)获取有效的本地ip地址

我曾尝试使用
NetworkInterface.GetAllNetworkInterfaces()
,但Xamarin对该方法的实现中有一个bug,它不起作用

所以,我环顾四周,找到了一个简单的方法来实现这一点。我尝试了以下方法:

IPAddress[] hostAddresses = Dns.GetHostAddresses(Dns.GetHostName());
上面抛出了一个“无法解析主机…”异常(其中…是我的设备名)

所以它确实得到了我的设备名,但是它无法解析它

这段代码在WPF应用程序的windows下运行良好。 在MAC电脑上使用Xamarin Studio和iPhone或iPad模拟器可以很好地工作

然而,当我试图让MAC在我的实际iPad设备上启动应用程序时,我得到了以下例外:

System.Net.Sockets.SocketException:无法解析主机“Charrison” 在中的System.Net.Dns.Error_11001(System.String主机名)[0x00000]处 /开发者/MonoTouch/Source/mono/mcs/class/System/System.Net/Dns.cs:298 在System.Net.Dns.hostent_to_IPHostEntry(System.String 原始主机名、System.String h_名称、System.String[]h_别名、, 中的System.String[]h_addrlist)[0x00082] /开发者/MonoTouch/Source/mono/mcs/class/System/System.Net/Dns.cs:326 位于中的System.Net.Dns.GetHostByName(System.String主机名)[0x0002a] /开发者/MonoTouch/Source/mono/mcs/class/System/System.Net/Dns.cs:467 位于System.Net.Dns.GetHostEntry(System.String主机名或地址) [0x00061]英寸 /开发者/MonoTouch/Source/mono/mcs/class/System/System.Net/Dns.cs:406 位于System.Net.Dns.GetHostAddresses(System.String主机名或地址) [0x00065]英寸 /开发者/MonoTouch/Source/mono/mcs/class/System/System.Net/Dns.cs:432 在UpnpUI_iOS.DeviceViewController.startButton_触摸屏内部 (System.Object发送方,System.EventArgs e)[0x0008c]位于 /用户/engineering/Projects/UpnpUI\u iOS/DeviceViewController.cs:83 at MonoTouch.UIKit.UIControlEventProxy.Activated()[0x00000]在中 /开发者/单点触摸/来源/单点触摸/src/UIKit/UIControl。cs:30 at at(包装器管理为本机) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)位于MonoTouch.UIKit.UIApplication.Main (System.String[]参数,System.String principalClassName,System.String 中的delegateClassName)[0x0004c] /开发者/MonoTouch/Source/MonoTouch/src/UIKit/UIApplication.cs:38
在中的UpnpUI_iOS.Application.Main(System.String[]args)[0x00008]处 /用户/engineering/Projects/UpnpUI_iOS/Main.cs:17

如果有人知道如何快速获取本地设备的有效IP地址,而该设备将使用.net和Xamarin在我的iPad上运行,请告诉我。我会非常感激的


提前感谢您的有用建议。

从Mike Bluestein那里偷来的


Xamarin在NetworkInterface.GetAllNetworkInterfaces()的实现中有一个bug。错误在于列表中返回的接口没有设置“OperationalStatus”。它们都是未知的。我想只要“假设”返回的接口是“启动”的就可以了,即使它们说“未知”?Network.GetAllNetworkInterfaces()会为我抛出一个主机异常。我在中询问过这一点,如果您能提供任何信息,我将不胜感激。虽然答案是seam在所有3款(iOS、Android和UWP)上都能正常工作,但在UWP上它返回169.254。。。无效但MS保留的地址,该地址甚至未显示在ipconfig接口中
foreach (var netInterface in NetworkInterface.GetAllNetworkInterfaces()) {
    if (netInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211 ||
        netInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet) {
        foreach (var addrInfo in netInterface.GetIPProperties().UnicastAddresses) {
            if (addrInfo.Address.AddressFamily == AddressFamily.InterNetwork) {
                var ipAddress = addrInfo.Address;

                // use ipAddress as needed ...
            }
        }
    }  
}