2012-02-03 11 views
5

Mi aplicación usa multicast para enviar una baliza en períodos junto con el mensaje de protocolo y la ip del host que se une al grupo de multidifusión. En el dispositivo Android está devolviendo 127.0.0.1. He mirado alrededor y encontré que muchas personas sugirieron cambiar un archivo de host. Pero, en el caso de Android, no es posible en mi contexto. ¿Cómo llego IP real del dispositivo, no la dirección de bucle de retorno ..InetAddress.getLocalHost(). GetHostAddress() devuelve 127.0.0.1 en Android

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

En mi teléfono, a menos que tenga Wi-Fi activado y esté conectado a una red Wi-Fi, no tiene una dirección IP. Si no hay una dirección local, 'getLocalHost' devuelve la dirección de bucle invertido, que es lo que obtienes. –

+0

@JoachimPileborg prueba mi respuesta. Espero que esto solucione tu problema. – himanshu

Respuesta

11

Se han modificado algunos bits y este funciona como se desea para obtener direcciones IPv4. ! inetAddress.isLoopbackAddress() elimina toda la dirección de bucle invertido. ! inetAddress.isLinkLocalAddress() y inetAddress.isSiteLocalAddress()) elimina todas las direcciones IPv6. Espero que esto ayude a alguien aquí.

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

Solo para asegurarse de que nadie lo olvide, necesitará permiso de INTERNET en su AndroidManifest.xml:

0

Prueba esto: -

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

cuando se envía mi aplicación ... ¿Cómo crees que será posible proporcionar el nombre de host para todos los usuarios que usan la aplicación? ¿Conoces alguna otra forma de encontrarlo? – Milan

0

De mis intentos, lo máximo que podía conseguir era la dirección de red Wi-Fi.

No conozco otra manera en lugar de llamar a un servidor web que devuelve la dirección IP. Obviamente, el problema con esto es que usa los datos del teléfono.

Cuestiones relacionadas