【问题标题】:Java InetAddress name resolutionJava InetAddress 名称解析
【发布时间】:2017-11-11 16:54:06
【问题描述】:

我对所有 Java 专家提出以下问题。

我试图想出一种可靠的方法来创建 localHost InetAddress 对象作为InetAddress.getLocalHost() 的后备方法。

我面临以下问题:

在某些情况下,我的 Java 应用程序由于抛出 UnknownHostException 而无法启动,以防运行它的机器的网络连接中断(部署在 Windows 机器上)。

所以到目前为止我的想法如下:

1) 尝试从 NetworkInterfaces 枚举中获取 localHost InetAddress 对象(我发现这有点麻烦)。

2) 尝试通过 System 环境获取本地主机名字符串,然后尝试通过 InetAddress.getByName() 创建 InetAddress 对象。

我强烈赞成第二种方法,因为它更容易并且看起来更时尚,但是在获取所需的 InetAddress 对象时仍然遇到问题,以防网络连接中断。

现在我的问题有两个:

1) 鉴于我在上述机器中维护了一个 hosts 文件,其中包含机器的条目(主机名 - IP 地址),#2 是否无法按预期工作?我知道最终 DNS 解析将归结为实际的操作系统,但即使没有可用的网络连接,Windows 也不应该能够使用它们的主机文件来执行此操作。

2) 有没有办法在给定机器主机名的情况下创建 InetAddress 对象,但该机器没有活动的网络连接 - 接口关闭(从而避免前面提到的 UnkownHostException)?

【问题讨论】:

    标签: java dns inetaddress


    【解决方案1】:

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

    • 本地 DNS 解析器被配置为在外部 DNS 服务器之前检查“hosts”文件,并且

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2016-12-02
      • 2012-11-03
      相关资源
      最近更新 更多