12

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 を使用してローカル アドレスを取得する別の方法はありますか?

4

1 に答える 1

8

これは、IPv6 がサポートされているかどうかを判断しようとしているランタイムに関連して、Mono Socket 実装の内部でスローされた例外であることが判明しました (ソースはこちら、この記事の執筆時点では 810 行目)。

この例外は、Mono で Socket を初めて使用しようとしたときにスローされ、安全に無視できます。デバッガーで「スローされたすべての例外で中断」するように実行している場合 (コードのクリーン度を確保するためにときどき実行します)、特に SocketExceptions をオフにするか、この中断を過ぎて続行する必要があります。

于 2012-04-06T18:31:17.270 に答える