2012-04-06 371 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