jhw*_*ist 82 java freebsd opensolaris
我正在不同的操作系统上测试我们的服务器应用程序(编写的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有什么特别之处吗?
任何提示都表示赞赏,谢谢.
jhw*_*ist 116
在良好的传统中,我可以再次回答我自己的问题:
似乎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
我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());
  }
}
在我的亚马逊实例上,我遇到了同样的问题,存在默认 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
| 归档时间: | 
 | 
| 查看次数: | 91419 次 | 
| 最近记录: |