Я использую InetAddress.getLocalHost()
в своей программе, которая может быть развернута на серверах Windows и Linux. Дает ли он IP-адрес в обеих средах?Предоставляет ли InetAddress.getLocalHost IP-адрес системы Windows и Linux?
-1
A
ответ
1
Метод дает IP-адрес на всех платформах. Однако он может не дать вам IP-адрес, который вы ожидаете.
javadoc говорит, что это:
Возвращает адрес локального хоста. Это достигается путем извлечения имени хоста из системы, а затем разрешения этого имени в InetAddress.
Если есть менеджер безопасности, его метод checkConnect вызывается с именем локального хоста и -1 в качестве аргументов, чтобы увидеть, разрешена ли операция. Если операция не разрешена, возвращается InetAddress, представляющий обратный адрес.
Есть целый ряд сценариев, в которых IP, что заявка подана не IP-адрес, который вы хотите или потребность:
- Если приложение песочницы, то IP будет
127.0.0.1
. - Если локальный DNS настроен на возврат
127.0.0.1
имени хоста, то это то, что вы получите. (Я видел, что системы неправильно сконфигурированы.) - Если система имеет несколько сетевых адаптеров, поиск DNS может дать вам IP-адрес незащищенного сетевого адаптера.
- Если система фактически является виртуальной машиной, то IP-адрес, который видит система, может отличаться от того, который находится снаружи.
- Если IP-адрес системы находится в частном IP-диапазоне, он не будет адресуться «публично».
Если это не сработало, независимо от базовой системы, каково будет использование этого? Это должно быть одной из сильных сторон Java, независимости платформы. –
Java независима от ОС, хотя в редких случаях необходимо перекомпилировать ее для конкретного ввода-вывода – nafas