0
String hostAddress = InetAddress.getLocalHost().getHostAddress();

上記のコードは、Java 1.7 と 1.6 では動作が異なります。1.6 では、システム (10.4...) に割り当てられた正しい IP を返します。1.7 では、127.0.0.1 を返します。

この問題を回避するには、それを使用NetworkInterface.getNetworkInterfaces()して取得する必要がありますInetAddressInetAddress一度成功するまで、利用可能なすべてに接続しようとします。これはうまく機能しますが、Java 1.7 の動作が異なるのはなぜでしょうか?

どんな助けでも素晴らしいでしょう。

4

2 に答える 2

2

正確に言うのは難しいですが、いくつかのアイデア:

ドキュメントから:

ローカル ホストのアドレスを返します。これは、システムからホストの名前を取得し、その名前を InetAddress に解決することによって実現されます。

gethostname@Jayamohan によって言及された変更が関連することを示します


また、ドキュメントから

操作が許可されていない場合は、ループバック アドレスを表す InetAddress が返されます。

これはあなたが得ているものです。


127.0.0.1 は実際にマシンの有効なアドレスです (ほとんどの場合)。マルチアドレス システムでは、JVM はどの IP を使用するかをどのように決定しますか?

もっと読む、同様の質問

于 2013-03-22T09:28:13.747 に答える
1

これは からの変更によるものJDK 7u4です。

詳細はこちら

これは実際にはバグではなく、7u4 での動作変更です。7u4 より前の Linux 実装では gethostname を使用していましたが、7u4 では getnameinfo を使用します。この変更は、Mac ポートに忍び込んだエラーでした。

于 2013-03-22T09:07:59.893 に答える