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

时间:2013-07-26 15:17:33

标签: ios .net dns xamarin upnp

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

我尝试使用NetworkInterface.GetAllNetworkInterfaces(),但是Xamarin在该方法的实现中存在一个错误,但它不起作用。

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

IPAddress[] hostAddresses = Dns.GetHostAddresses(Dns.GetHostName());

上面引发了“无法解析主机...”异常(其中......是我的设备名称)。

所以它确实获取了我的设备名称,但它无法解析它。

此代码在WPF应用程序的Windows下正常工作。 使用带有iPhone或iPad模拟器的MAC上的Xamarin Studio可以正常工作。

但是,当我尝试将MAC启动应用程序到我的实际iPad设备上时,我得到以下异常:

  

System.Net.Sockets.SocketException:无法解析主持人'Charrison'   在System.Net.Dns.Error_11001(System.String hostName)[0x00000]中   /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/Dns.cs:298   在System.Net.Dns.hostent_to_IPHostEntry(System.String   originalHostName,System.String h_name,System.String [] h_aliases,   System.String [] h_addrlist)[0x00082] in   /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/Dns.cs:326   在System.Net.Dns.GetHostByName(System.String hostName)[0x0002a]中   /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/Dns.cs:467   在System.Net.Dns.GetHostEntry(System.String hostNameOrAddress)   [0x00061] in   /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/Dns.cs:406   在System.Net.Dns.GetHostAddresses(System.String hostNameOrAddress)   [0x00065] in   /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/Dns.cs:432   在UpnpUI_iOS.DeviceViewController.startButton_TouchUpInside   (System.Object sender,System.EventArgs e)[0x0008c] in   /Users/engineering/Projects/UpnpUI_iOS/DeviceViewController.cs:83 at   MonoTouch.UIKit.UIControlEventProxy.Activated()[0x00000] in   /Developer/MonoTouch/Source/monotouch/src/UIKit/UIControl.cs:30 at   at(包装器托管到原生)   MonoTouch.UIKit.UIApplication:UIApplicationMain   (int,string [],intptr,intptr)在MonoTouch.UIKit.UIApplication.Main   (System.String [] args,System.String principalClassName,System.String   delegateClassName)[0x0004c] in   /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38
  在UpnpUI_iOS.Application.Main(System.String [] args)[0x00008]中   /Users/engineering/Projects/UpnpUI_iOS/Main.cs:17

如果有人知道一些好的和快速的方法来获取本地设备的有效IP地址,该地址设备将在我的iPad上使用.net与Xamarin实际工作,请告诉我。我真的很感激。

提前感谢您的有用建议。

1 个答案:

答案 0 :(得分:3)

forums

中被Mike Bluestein偷走了
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 ...
            }
        }
    }  
}