Chciałbym określić lokalny adres IP z mojego apletu java. Problem występuje, gdy istnieje kilka adresów IP na tym samym komputerze, który ma połączenia LAN i internetowe (palm, VMWare ...).Uzyskaj poprawny lokalny adres IP z apletu Java
Oto moja próba:
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();
}
}
Wynikiem jest:
HostName = xxxx
HostAddressLocal = xx.xx.xx.xx
hostAddress = 10.10.11.51
hostAddress = 192.168.23.1
hostAddress = 192.168.106.1
gdzie xx.xx.xx.xx nie jest prawidłowy adres. Prawidłowe jest 10.10.11.51.
EDIT w odpowiedzi na jarnbjo:
kryształ piłka powiedzieć prawdę. Rozumiesz mój problem. Klient może łączyć się przez proxy, więc nie mogę użyć twojego pierwszego punktu. Jeśli wykonam ten kod poniżej na moim komputerze:
Socket s = new Socket("www.w3c.org", 80);
InetAddress ip = s.getLocalAddress();
System.out.println("Internet IP = " + ip.toString());
s.close();
mam ten wynik:
Internet IP = /127.0.0.1
I nie 10.10.11.51
Masz na myśli aplet? Z głównym i w stanie uzyskać dostęp do lokalnego adresu UP? –
Mieliśmy również ten problem. – KLE
Co dokładnie próbujesz zrobić? Dlaczego potrzebujesz tych informacji? Co zrobić, jeśli użytkownik nie ma adresu lokalnego? Co jeśli użytkownik ma wiele interfejsów i wiele lokalnych adresów? Co się stanie, jeśli użytkownik ma IPv6 (który każdy interfejs może mieć potencjalnie wiele adresów)? W twoim programie występuje pewien problem projektowy, nigdy nie powinien polegać na tym, że ta właściwość działa poprawnie. – Juliano