所以,我正在使用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实际工作,请告诉我。我真的很感激。
提前感谢您的有用建议。
答案 0 :(得分:3)
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 ...
}
}
}
}