2012-04-06 9 views
12

Sto cercando di ottenere l'indirizzo IP locale del mio dispositivo Android utilizzando Mono per Android, ma in mancanza.Ottenere l'indirizzo IP locale

Il codice che uso per il quadro completo e compatto è questo:

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

Sotto M4A, tuttavia, cade presto - la chiamata Dns.GetHostName() ha esito negativo con

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

Esiste un problema noto con Dns.GetHostName in M4A? C'è un modo alternativo per ottenere l'indirizzo locale usando M4A?

risposta

8

Si scopre che questa è un'eccezione generata nell'interno dell'implementazione Mono Socket, correlata al runtime che tenta di determinare se IPv6 è supportato (source here, riga 810 al momento della stesura).

L'eccezione viene lanciata la prima volta che si tenta di utilizzare qualsiasi socket in Mono e può essere tranquillamente ignorato. Se esegui il debugger su "Interrompi tutte le eccezioni generate", che occasionalmente eseguo per garantire la pulizia del codice, devi disattivare specificamente SocketExceptions o solo continuare oltre questa interruzione.

+0

Bel lavoro rispondendo alla tua stessa domanda. E grazie per averlo condiviso con il resto di noi. –

Problemi correlati