Ios 调用Dns.GetHostAddresses(Dns.GetHostName())时无法解决主机异常
因此,我正在使用Xamarin和.net在一个iOS项目中实现uPNP。我一直在努力为本地设备(即运行程序的设备)获取有效的本地ip地址 我曾尝试使用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())
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 ...
}
}
}
}