我正在不同的操作系统上测试我们的服务器应用程序(编写的Java),并认为OpenSolaris(2008.11)由于良好的Java集成而成为最不麻烦的。事实证明我错了,因为我最终得到了一个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有什么特别之处吗?
任何提示都表示赞赏,谢谢。
答案 0 :(得分:112)
在良好的传统中,我可以再次回答我自己的问题:
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之类的任何编辑器上再添加一行。
<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
答案 1 :(得分:4)
Solaris上的主机查找使用/etc/nsswitch.conf
,因此根据'hosts:'行说明它确定是否应咨询/etc/hosts
,NIS,DNS和/或LDAP。
如果您只使用主机和DNS,则应在/etc/nsswitch.conf
:
hosts: files dns
nslookup desvearth01
的作用原因是nslookup
命令直接咨询/etc/resolv.conf
。如果要进行更好的命令行测试,请使用以下命令:
getent hosts desvearth01
答案 2 :(得分:4)
我使用NetworkInterface.getNetworkInterfaces()
作为InetAddress.getLocalHost()
投出UnknownHostException
时的后退。这是代码(为清晰起见,无异常处理)。
Intent callIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:"+"999999");
startActivity(callIntent);
}
答案 3 :(得分:4)
当我更改工作站名称并尝试启动Glassfish 2时会出现此错误。您还必须重命名/ etc / hosts中的条目,如下所示:
127.0.0.1 localhost
127.0.1.1 MyNewName
答案 4 :(得分:4)
在我的亚马逊实例上我遇到了同样的问题,存在默认的DNS配置问题。所以要解决这个问题,我已经完成了这些步骤 -
获取您的主机名
$hostname
ip-10-122-16-169
ping到主机名
$ping ip-10-122-16-169
ping: unknown host ip-10-122-16-169
cat / etc / hosts 文件,您将获得类似
的内容
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost6 localhost6.localdomain6
现在你只需要在第一行的末尾附加你的主机名,所以当你追加它时看起来像
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ip-10-122-16-169
::1 localhost6 localhost6.localdomain6
现在您已准备好再次检查ping相同的主机名
$ping ip-10-122-16-169
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=255 time=0.018 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=255 time=0.024 ms
答案 5 :(得分:2)
Checkout / etc / hostname 然后将您的主机名放入hosts文件。
答案 6 :(得分:1)
如果您看到此消息,则需要设置主机名 WITH hostname superhost.domain
命令!
在此之后,检查哪个/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
答案 7 :(得分:0)
我也有这方面的问题。我需要做进一步的测试,但它看起来像
NetworkInterface.getNetworkInterfaces()
可以更可靠。我认为这不是查找,而只是抓取IP。
当getLocalHost()
失败时,我将其用作“次佳”。
答案 8 :(得分:0)
另一个选项是在这篇文章中(事实上,您的/ etc / sysconfig / network文件中的主机名是什么...通过将其更改为FQDN名称来修复此问题。)
java getLocalHost() UnknownHostException /etc/hosts file differs linux api?