InetAddress.getLocalHost()引发UnknownHostException

我正在不同的操作系统上测试我们的服务器应用程序(编写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有什么特别的地方吗?


任何提示表示赞赏,谢谢。


心有法竹
浏览 1397回答 3
3回答

拉丁的传说

按照传统,我可以再次回答自己的问题:似乎InetAddress.getLocalHost()忽略了/etc/resolv.conf,但只查看了/ etc / hosts文件(除了本地主机,我没有指定任何其他文件)。将IP和主机名添加到此文件即可解决该问题,并且该异常消失了。上面的答案几乎是正确的,我从上面得到了提示,我的问题得到了解决...谢谢。但是为了改善这一点,我将逐步进行更改,这样即使对于天真的用户也将有所帮助。脚步:打开/ etc / hosts,条目可能如下所示。127.0.0.1&nbsp; &nbsp;localhost localhost.localdomain localhost4 localhost4.localdomain4&nbsp;&nbsp;::1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;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 localhost127.0.0.1&nbsp; &nbsp; localhost localhost.localdomain localhost4 localhost4.localdomain4::1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; localhost localhost.localdomain localhost6 localhost6.localdomain6只需保存它,然后再次运行您的java ...代码,即可完成工作。

繁华开满天机

我NetworkInterface.getNetworkInterfaces()用作回退的InetAddress.getLocalHost()时机UnknownHostException。这是代码(为了清楚起见,没有异常处理)。Enumeration<NetworkInterface> iterNetwork;Enumeration<InetAddress> iterAddress;NetworkInterface network;InetAddress address;iterNetwork = NetworkInterface.getNetworkInterfaces();while (iterNetwork.hasMoreElements()){&nbsp; &nbsp;network = iterNetwork.nextElement();&nbsp; &nbsp;if (!network.isUp())&nbsp; &nbsp; &nbsp; continue;&nbsp; &nbsp;if (network.isLoopback())&nbsp; // If I want loopback, I would use "localhost" or "127.0.0.1".&nbsp; &nbsp; &nbsp; continue;&nbsp; iterAddress = network.getInetAddresses();&nbsp; while (iterAddress.hasMoreElements())&nbsp; {&nbsp; &nbsp; &nbsp;address = iterAddress.nextElement();&nbsp; &nbsp; &nbsp;if (address.isAnyLocalAddress())&nbsp; &nbsp; &nbsp; &nbsp; continue;&nbsp; &nbsp; &nbsp;if (address.isLoopbackAddress())&nbsp; &nbsp; &nbsp; &nbsp; continue;&nbsp; &nbsp; &nbsp;if (address.isMulticastAddress())&nbsp; &nbsp; &nbsp; &nbsp; continue;&nbsp; &nbsp; &nbsp;return(address.getHostAddress());&nbsp; }}

手掌心

Solaris上的主机查找使用的方式/etc/nsswitch.conf取决于“ hosts:”行所说的内容,它确定是否应查询/etc/hostsNIS,DNS和/或LDAP。如果仅使用主机和DNS,则应该在以下位置使用它/etc/nsswitch.conf:主机:文件dnsnslookup desvearth01起作用的原因是因为nslookup命令直接参考/etc/resolv.conf。如果要进行更好的命令行测试,请使用以下命令:getent主机desvearth01
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java