为了账号安全,请及时绑定邮箱和手机立即绑定

InetAddress.getLocalHost()引发UnknownHostException

InetAddress.getLocalHost()引发UnknownHostException

心有法竹 2019-10-06 16:13:12
我正在不同的操作系统上测试我们的服务器应用程序(编写Java),并认为由于Java集成良好,OpenSolaris(2008.11)的麻烦最少。原来我错了,因为我最终遇到UnknownHostExceptiontry {  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有什么特别的地方吗?任何提示表示赞赏,谢谢。
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

按照传统,我可以再次回答自己的问题:


似乎InetAddress.getLocalHost()忽略了/etc/resolv.conf,但只查看了/ etc / hosts文件(除了本地主机,我没有指定任何其他文件)。将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

只需保存它,然后再次运行您的java ...代码,即可完成工作。


查看完整回答
反对 回复 2019-10-06
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

我NetworkInterface.getNetworkInterfaces()用作回退的InetAddress.getLocalHost()时机UnknownHostException。这是代码(为了清楚起见,没有异常处理)。


Enumeration<NetworkInterface> iterNetwork;

Enumeration<InetAddress> iterAddress;

NetworkInterface network;

InetAddress address;


iterNetwork = NetworkInterface.getNetworkInterfaces();


while (iterNetwork.hasMoreElements())

{

   network = iterNetwork.nextElement();


   if (!network.isUp())

      continue;


   if (network.isLoopback())  // If I want loopback, I would use "localhost" or "127.0.0.1".

      continue;


  iterAddress = network.getInetAddresses();


  while (iterAddress.hasMoreElements())

  {

     address = iterAddress.nextElement();


     if (address.isAnyLocalAddress())

        continue;


     if (address.isLoopbackAddress())

        continue;


     if (address.isMulticastAddress())

        continue;


     return(address.getHostAddress());

  }

}


查看完整回答
反对 回复 2019-10-06
?
手掌心

TA贡献1942条经验 获得超3个赞

Solaris上的主机查找使用的方式/etc/nsswitch.conf取决于“ hosts:”行所说的内容,它确定是否应查询/etc/hostsNIS,DNS和/或LDAP。


如果仅使用主机和DNS,则应该在以下位置使用它/etc/nsswitch.conf:


主机:文件dns

nslookup desvearth01起作用的原因是因为nslookup命令直接参考/etc/resolv.conf。如果要进行更好的命令行测试,请使用以下命令:


getent主机desvearth01


查看完整回答
反对 回复 2019-10-06
  • 3 回答
  • 0 关注
  • 1396 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信