Java InetAddress名称解析

时间:2017-06-09 15:36:28

标签: java dns inetaddress

我对所有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)?

1 个答案:

答案 0 :(得分:1)

1)如果符合以下条件,它将按预期工作:

  • 本地DNS解析器配置为检查" hosts"外部DNS服务器之前的文件,以及

  • 条目是正确的,它引用了本地主机的工作IP地址。

另一种方法是使用环回地址(例如" localhost" / 127.0.0.1)

2)当然。使用InetAddress.getByAddress(String, byte[])。请注意,DNS中未检查该名称。