2012-02-03 2 views
5

Мое приложение использует многоадресную рассылку для отправки маяка в периоды вместе с сообщением протокола и ip узла, соединяющего группу многоадресной рассылки. В устройстве Android он возвращает 127.0.0.1. Я огляделся и обнаружил, что многие люди предлагали изменить файл хоста. Но в случае андроида это невозможно в моем контексте. Как получить реальный IP устройства, а не петлевой адрес ..InetAddress.getLocalHost() возвращает 127.0.0.1 в Android

private void getLocalAddress() 
{ 
    try { 
     String localHost = InetAddress.getLocalHost().getHostAddress(); 
     servers.add(localHost); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 
} 
+1

На моем телефоне, если он не активирован Wi-Fi и не подключен к сети Wi-Fi, у него нет IP-адреса. Если локальный адрес отсутствует, 'getLocalHost' возвращает адрес loopback, который вы получаете. –

+0

@JoachimPileborg попробуйте мой ответ. Я надеюсь, что это решит проблему ур. – himanshu

ответ

11

Изменено несколько бит, и этот работает для получения адресов IPv4. ! inetAddress.isLoopbackAddress() удаляет весь адрес обратной связи. ! inetAddress.isLinkLocalAddress() и inetAddress.isSiteLocalAddress()) удаляет все адреса IPv6. Надеюсь, это поможет кому-то здесь.

StringBuilder IFCONFIG=new StringBuilder(); 
    try { 
     for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress inetAddress = enumIpAddr.nextElement(); 
       if (!inetAddress.isLoopbackAddress() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) { 
       IFCONFIG.append(inetAddress.getHostAddress().toString()+"\n"); 
       } 

      } 
     } 
    } catch (SocketException ex) { 
     Log.e("LOG_TAG", ex.toString()); 
    } 
    servers.add(IFCONFIG.toString()); 
+0

Чтобы убедиться, что никто не забудет об этом, вам понадобится разрешение ИНТЕРНЕТ на ваш AndroidManifest.xml:

0

Попробуйте это: -

String hostname = args[0]; 
try 
    { 
     InetAddress ipaddress = InetAddress.getByName(hostname); 
     System.out.println("IP address: " + ipaddress.getHostAddress()); 
    } 
    catch (UnknownHostException e) 
    { 
     System.out.println("Could not find IP address for: " + hostname); 
    } 
+0

, когда мое приложение отправлено. Как вы думаете, можно ли указать имя хоста для всех пользователей, использующих приложение? Вы знаете какой-либо другой способ его найти? – Milan

0

Из моих попыток, максимум я мог бы получить был WiFi сетевой адрес.

Я не знаю другого способа, а не вызываю веб-сервер, который возвращает ip-адрес. Очевидно, проблема заключается в том, что он использует данные телефона.

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