2012-04-06 1 views
12

Я пытаюсь получить локальный IP-адрес своего устройства Android с помощью Mono для 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

Есть известная проблема с Dns.GetHostName под M4A? Есть ли альтернативный способ получить локальный адрес с помощью M4A?

ответ

8

Оказалось, что это исключение, вызванное внутренними реализациями Mono Socket, связанное с временем выполнения, которое пытается определить, поддерживается ли IPv6 (source here, строка 810 на момент написания этой статьи).

Исключением бросается при первом попытке использовать любой Socket под Mono и может быть безопасно проигнорирован. Если вы работаете с вашим отладчиком, чтобы «Break on all the throw exceptions», который я иногда делаю для обеспечения чистоты кода, вам нужно будет специально отключить SocketExceptions или просто продолжить этот разрыв.

+0

Хорошая работа, отвечающая на ваш собственный вопрос. И спасибо, что разделили его с остальными. –

 Смежные вопросы

  • Нет связанных вопросов^_^