Вопрос по java – Не удается получить имя хоста с помощью Java в последней версии jdk7
Я получаю имя хоста машины следующим образом:
<code>InetAddress.getLocalHost().getHostName(); </code>
Однако когда я ставлю последний JDK (jdk1.7.0_04), приведенный выше код просто возвращает LOCALHOST. Я проверил / etc / hosts (его linux) и там написано:
<code>127.0.0.1 localhost redbull </code>
Он возвращал REDBULL до обновления. Так что я изменил это, поставив
<code>127.0.0.1 redbull localhost </code>
instead, и он начал возвращать REDBULL без проблем.
Есть ли лучший способ сделать эту работу?
я подумал о том, чтобы пометить это как дуплекс, но единственные ответы, которые я нашел, предполагают, что вы используетеInetAddress.getLocalHost().getHostName()
. Который, честно говоря, я думаю,долже вернуть "localhost" в этом случае. И эти ответы, я полагаю, верны, потому что на самом деле нет никакого чистого Java-способа сделать это (по крайней мере, ни один из них не переносим назад к более старым JRE).
Мы используем JNI для достижения этой цели. Мы называемSCPreferencesGetHostName()
в Mac OS 10.4+,SCDynamicStoreCopyLocalHostName()
на старых Mac OS,GetComputerName()
на Win32,gethostname()
где-либо еще
Можно, конечно, просто позвонить/bin/hostname
на машинах Unix или посмотрите на переменную окруженияCOMPUTERNAME
в Windows. Это своего рода суждение о том, чувствуете ли вы себя лучше, звоня в JNI илиexec
Звонит в другую программу.
Для чего это стоит, причина, по которой мы не называемgethostname()
в Mac OS - потому что Mac делает странную динамическую вещь с именем хоста, гдеgethostname()
вернет обратный DNS вашего основного устройства Ethernet. Если бы я подключил свой Mac прямо к кабельному модему, я бы получил имя хостаcustomer-10-42-21-42
или что-то еще, что мой кабельный провайдер решил установить в качестве своей записи PTR в своей DNS. Вместо этого, перейдя в настройки, вы получите стабильное имя хоста, которое определил пользователь.