Me gustaría determinar la dirección IP local de mi applet Java. El problema es cuando hay varias direcciones IP en la misma máquina, que tiene conexiones LAN e Internet (palm, VMWare ...).Obtenga la dirección IP local correcta del applet de java
Aquí es mi prueba:
public static void main(String[] args) {
try {
String hostName = InetAddress.getLocalHost().getHostName();
System.out.println("HostName = " + hostName);
System.out.println("HostAddressLocal = " +
InetAddress.getLocalHost().getHostAddress());
InetAddress[] inetAddresses = InetAddress.getAllByName(hostName);
for (InetAddress inetAddress : inetAddresses) {
System.out.println("hostAddress = " + inetAddress.getHostAddress());
}
} catch (Exception e) {
e.printStackTrace();
}
}
El resultado es:
HostName = xxxx
HostAddressLocal = xx.xx.xx.xx
hostAddress = 10.10.11.51
hostAddress = 192.168.23.1
hostAddress = 192.168.106.1
donde xx.xx.xx.xx no es la dirección correcta. El correcto es 10.10.11.51.
EDITAR en respuesta a jarnbjo:
Su bola de cristal dice la verdad. Usted ha entendido mi problema. El cliente puede conectarse a través de un proxy, así que no puedo usar su primer punto. Si ejecuta este código de abajo en mi equipo:
Socket s = new Socket("www.w3c.org", 80);
InetAddress ip = s.getLocalAddress();
System.out.println("Internet IP = " + ip.toString());
s.close();
tengo este resultado:
Internet IP = /127.0.0.1
Y no 10.10.11.51
¿Quieres decir applet? Con un principal y capaz de acceder a la dirección UP local? –
Tuvimos ese problema también. – KLE
¿Qué estás tratando de hacer exactamente? ¿Por qué necesita esta información? ¿Qué pasa si el usuario no tiene una dirección local? ¿Qué sucede si el usuario tiene muchas interfaces y muchas direcciones locales? ¿Qué pasa si el usuario tiene IPv6 (que cada interfaz puede tener muchas direcciones)? Hay un problema de diseño en su programa, nunca debe confiar en que esta característica funcione correctamente. – Juliano