Вопрос по java – Не удается получить имя хоста с помощью Java в последней версии jdk7

10

Я получаю имя хоста машины следующим образом:

<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 без проблем.

Есть ли лучший способ сделать эту работу?

Ваш Ответ

1   ответ
2

я подумал о том, чтобы пометить это как дуплекс, но единственные ответы, которые я нашел, предполагают, что вы используете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. Вместо этого, перейдя в настройки, вы получите стабильное имя хоста, которое определил пользователь.

Да, это выглядит как дубликат, но это не так, когда вы смотрите внимательно. Я также согласен, что он должен вернуть LOCALHOST. Однако со всеми предыдущими версиями JDK этого не произошло, и, следовательно, «исправление» логики на данном этапе кажется противоречивым. Использование JNI для получения чего-то такого простого, как имя хоста, кажется мне излишним. Если у кого-то нет лучшего решения или JDK не предлагает что-то более стандартное, я буду использовать этот «обходной путь» в это Daniil
Я бы согласился. Развертывание JNI, хотя оно, безусловно, понятно, добавляет еще один уровень сложности к процессу сборки и развертывания. А если это единственный JNI, который вам нужен? Вероятно, излишне. Странно, что они изменили бы это, команда Java имеет тенденцию отмечать, казалось бы, основные ошибки как «как задумано», чтобы сохранить backcompat. Edward Thomson

Похожие вопросы