获取本地IP地址

时间:2012-04-06 16:18:27

标签: c# xamarin.android

我正在尝试使用Mono for Android获取Android设备的本地IP地址,但失败了。

我用于完整和紧凑框架的代码是:

var iplist = (from a in Dns.GetHostAddresses(Dns.GetHostName())
              where a.AddressFamily == AddressFamily.InterNetwork
              select a).ToArray();
LocalAddress = iplist[0];

然而,在M4A下,它会提前倒下 - Dns.GetHostName()调用失败并带有

System.Net.Sockets.SocketException: An address incompatible with the requested protocol was used

M4A下的Dns.GetHostName是否存在已知问题?是否有另一种方法可以使用M4A获取本地地址?

1 个答案:

答案 0 :(得分:8)

事实证明,这是在Mono Socket实现的内部抛出的异常,与运行时试图确定是否支持IPv6有关(source here,在撰写本文时的第810行)。

第一次尝试在Mono下使用任何Socket时会抛出异常,并且可以安全地忽略该异常。如果您使用调试器运行“中断所有引发的异常”,我偶尔会这样做以确保代码清洁,您必须专门关闭SocketExceptions或者只是继续经过这个中断。