我对所有Java专家都有以下问题。
我试图想出一种可靠的方法来创建localHost InetAddress对象作为InetAddress.getLocalHost()
的回退方式。
我面临以下问题:
在某些情况下,由于引发了UnknownHostException,我的Java应用程序无法启动,以防它运行的计算机的网络连接断开(在Windows计算机上部署)。
所以到目前为止我的想法如下:
1)尝试从NetworkInterfaces枚举中获取localHost InetAddress对象(我发现它有点麻烦)。
2)尝试通过System环境获取本地主机名字符串,然后尝试通过InetAddress.getByName()
创建InetAddress对象。
我非常支持第二种方法,因为它更容易,看起来更简洁,但我仍然遇到问题,如果网络连接断开,我会想要获取InetAddress对象。
现在我的问题是两个:
1)鉴于我在所述机器中维护一个主机文件,其中包含机器的条目(主机名 - IP地址),#2不能按预期工作吗?我知道最终DNS解析将归结为实际操作系统,但即使没有可用的网络连接,Windows也不应该使用其hosts文件来执行此操作。
2)有没有办法在给定机器主机名的情况下创建一个InetAddress对象,但没有这台机器有一个活动网络连接 - 接口关闭(从而避免了前面提到的UnkownHostException)?
答案 0 :(得分:1)
1)如果符合以下条件,它将按预期工作:
本地DNS解析器配置为检查" hosts"外部DNS服务器之前的文件,以及
条目是正确的,它引用了本地主机的工作IP地址。
另一种方法是使用环回地址(例如" localhost" / 127.0.0.1)
2)当然。使用InetAddress.getByAddress(String, byte[])
。请注意,DNS中未检查该名称。