Подтвердить что ты не робот

Получение локального 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?

4b9b3361

Ответ 1

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

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