Получение локального IP-адреса
Я пытаюсь получить локальный IP-адрес своего Android-устройства, используя Mono для Android, но не смог.
Код, который я использую для полной и компактной структуры, таков:
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?
Ответы
Ответ 1
Оказывается, это исключение, вызванное внутренними реализациями Mono Socket, связанное с временем выполнения, пытающимся определить, поддерживается ли IPv6 (источник здесь, строка 810 на момент написания статьи).
Исключение возникает при первом попытке использовать любой Socket под Mono и может быть безопасно проигнорировано. Если вы работаете с вашим отладчиком, чтобы "Break on all the throw exceptions", который я иногда делаю для обеспечения чистоты кода, вам придется специально отключить SocketExceptions или просто продолжить этот разрыв.