2012-04-06 28 views
12

Estoy tratando de obtener la dirección IP local de mi dispositivo Android usando Mono para Android, pero fallando.Obteniendo la dirección IP local

El código que utilizo para el marco completo y compacto es la siguiente:

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

Bajo M4A, sin embargo, que cae a principios de - la Dns.GetHostName() llamada falla con

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

¿Existe un problema conocido con Dns.GetHostName en M4A? ¿Hay alguna forma alternativa de obtener la dirección local usando M4A?

Respuesta

8

Resulta que esta es una excepción lanzada en el interior de la implementación de Socket Mono, relacionada con el tiempo de ejecución tratando de determinar si se admite IPv6 (source here, línea 810 al momento de escribir esto).

La excepción se produce la primera vez que intenta utilizar cualquier zócalo en Mono y se puede ignorar de forma segura. Si está ejecutando con su depurador "Romper todas las excepciones lanzadas", que de vez en cuando hago para garantizar la limpieza del código, deberá apagar SocketExceptions o simplemente continuar más allá de este salto.

+0

Buen trabajo respondiendo a su propia pregunta. Y gracias por compartirlo con el resto de nosotros. –

Cuestiones relacionadas