2012-04-06 296 views
12

我试图获取Android设备的本地IP地址,但使用了Mono for 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获取本地地址?

回答

8

事实证明,这是Mono Socket实现内部引发的一个异常,与试图确定IPv6是否受支持的运行时相关(source here,截至撰写本文时为止,第810行)。

第一次尝试在Mono下使用任何Socket并且可以安全地忽略时抛出异常。如果您正在使用调试器来运行“断开所有抛出的异常”,我偶尔会执行该操作来确保代码清洁,但您必须专门关闭SocketExceptions,或者直接继续此过程。

+0

不错的工作回答你自己的问题。并感谢您与我们其他人分享。 – 2012-04-06 23:21:42