10

次のように、マシンのホスト名を取得しています。

InetAddress.getLocalHost().getHostName();

ただし、最新の JDK (jdk1.7.0_04) を配置すると、上記のコードは単純に LOCALHOST を返します。/etc/hosts (その Linux) を確認したところ、次のように表示されています。

127.0.0.1    localhost    redbull

アップグレードするまで REDBULL を返しています。だから私はそれを入れて周りに変えました

127.0.0.1    redbull    localhost

代わりに、問題なく REDBULL を返し始めました。

これを機能させるより良い方法はありますか?

4

4 に答える 4

3

ええと、これを重複としてフラグを立てることを考えましたが、私が見つけた唯一の答えは、使用することを示唆しています 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 を返す奇妙な動的ホスト名処理を行うためです。Mac をケーブル モデムに直接接続するとcustomer-10-42-21-42、ケーブル プロバイダが DNS の PTR レコードとして設定することを決定したもののホスト名が取得されます。代わりに、設定に移動すると、ユーザーが決定した安定したホスト名が取得されます。

于 2012-05-10T22:23:53.147 に答える
2

私は同じ問題を抱えていましたが、次のすべてが並んでいるときはうまくいきました。ホスト名に DOT local を追加する必要がありました

$ scutil --get HostName
drums
$ scutil --get LocalHostName
drums
$ scutil --get ComputerName
drums

$ sudo hostname drums.local
$ hostname
drums.local

$sudo vim /etc/hosts
192.168.x.IP drums
127.0.0.1 localhost drums
255.255.255.255 broadcasthost
::1 localhost
fXXX::1XXX localhost

$networksetup -setv6off Ethernet

$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.9

$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
于 2013-11-11T21:50:00.507 に答える
0

これは、JDK7u4のmacosxポートの既知の問題です。

http://java.net/jira/browse/MACOSX_PORT-564

于 2012-06-11T21:01:16.327 に答える