89

サーバー アプリケーション (Java で記述) をさまざまなオペレーティング システムでテストしていますが、Java との統合が優れているため、OpenSolaris (2008.11) が最も問題が少ないと考えました。UnknownHostException になってしまうので、私は間違っていたことがわかりました

try {
  computerName = InetAddress.getLocalHost().getHostName();
  if (computerName.indexOf(".") > -1)
    computerName = computerName.substring(0,
        computerName.indexOf(".")).toUpperCase();
} catch (UnknownHostException e) {
  e.printStackTrace();
}

出力は次のとおりです。

java.net.UnknownHostException: desvearth01: desvearth01
    at java.net.InetAddress.getLocalHost(InetAddress.java:1353)

ただし、nslookup desvearth01正しい IP アドレスをnslookup localhost返し127.0.0.1、期待どおりに返します。また、同じコードが FreeBSD でも完全に機能します。私が気付いていない OpenSolaris の特別な点はありますか?

ヒントをいただければ幸いです。

4

9 に答える 9

123

伝統に則り、私自身の質問にもう一度答えることができます。

InetAddress.getLocalHost()を無視しているように/etc/resolv.conf見えますが、ファイルのみを調べ/etc/hostsます( 以外には何も指定していませんでしたlocalhost)。このファイルに IP とホスト名を追加すると、問題が解決し、例外はなくなります。


別の答えはほぼ正しいです。上からヒントを得て、問題は解決しました...ありがとう。

しかし、これを改善するために、段階的な変更を加えて、初心者のユーザーにも役立つようにしています.

手順:

  • 開く/etc/hostsと、エントリは次のようになります。

     127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4  
     ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
  • viまたはgedit(例: )などのエディタを使用して、この行の上にもう 1 行追加する必要があります<your-machine-ip> <your-machine-name> localhost

     192.168.1.73 my_foo localhost
    

これで、ファイル全体は次のようになります。

192.168.1.73 my_foo localhost
127.0.0.1    localhost localhost.localdomain localhost4 localhost4.localdomain4
::1          localhost localhost.localdomain localhost6 localhost6.localdomain6
  • それを保存して、Java コードを再度実行するだけで、作業は完了です。
于 2009-12-10T15:57:19.810 に答える
4

Solaris でのホスト ルックアップでは/etc/nsswitch.conf、「hosts:」行の内容に応じて/etc/hosts、NIS、DNS、および/または LDAP を参照する必要があるかどうかが決定されます。

ホストと DNS のみを使用する場合は、これを次の場所に置く必要があります/etc/nsswitch.conf

ホスト: ファイル DNS

機能する理由nslookup desvearth01は、nslookupコマンドが直接参照するため/etc/resolv.confです。より良いコマンド ライン テストを行いたい場合は、次のコマンドを使用します。

getent ホスト desvearth01
于 2010-05-20T13:56:41.573 に答える
4

このエラーは、ワークステーション名を変更して Glassfish 2 を起動しようとしたときに表示されます。また、/etc/hosts のエントリの名前を次のように変更する必要があります。

127.0.0.1       localhost
127.0.1.1       MyNewName
于 2015-09-22T14:20:19.497 に答える
2

/etc/hostnameをチェックアウトしてから、ホスト名を hosts ファイルに入れます。

于 2015-05-08T05:41:51.503 に答える
1

このメッセージが表示された場合は、ホスト名をWITH hostname superhost.domain COMMANDに設定する必要があります。

/etc/hostsこの後、このような文字列を含むファイルを確認します127.0.0.1 localhost

また、コマンドuname -aが次のような結果を返すことを確認します。

Linux superhost.domain 2.6.38-8-server #42-Ubuntu SMP Mon Apr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

このようではありません!!!!

Linux (なし) 2.6.38-8-server #42-Ubuntu SMP Mon Apr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

于 2012-07-27T05:55:53.890 に答える
0

私もこのあたりで問題を抱えています。さらにテストを行う必要がありますが、 NetworkInterface.getNetworkInterfaces()より信頼できるようです。これはルックアップを行わず、IP を取得するだけだと思います。

失敗したときの「次善の策」として使用していgetLocalHost()ます。

于 2010-07-06T17:08:15.747 に答える
0

別のオプションがこの投稿にあります (実際、ホスト名の /etc/sysconfig/network ファイルにあるものは... FQDN 名に変更することで、この問題を解決できます)。

java getLocalHost() UnknownHostException /etc/hosts ファイルは Linux API とは異なりますか?

于 2012-08-28T13:36:04.753 に答える