gpt4 book ai didi

java - Windows 和 Linux 中 InetSocketAddress#getHostName 对于 "127.0.0.1"的不同行为

转载 作者:行者123 更新时间:2023-11-30 05:41:39 26 4
gpt4 key购买 nike

InetAddress.getByName("127.0.0.1").getHostName()

上面的String在Windows中返回127.0.0.1,但在Linux中它返回localhost

InetAddress#getHostName 的文档说:

If this InetAddress was created with a host name, this host name will be remembered and returned; otherwise, a reverse name lookup will be performed and the result will be returned based on the system configured name lookup service.

  • 这是预期的行为吗?
  • 为什么不同操作系统会出现这种差异?
  • Linux 和 Windows 的名称查找服务是否不同,这就是我们看到这种行为差异的原因?

我见过this question ,但我的问题是关于 Windows 和 Linux 中 API 行为的差异以及造成这种差异的原因。

最佳答案

因此,Windows 和 Linux 之间没有主要区别。不过两者的配置还是有区别的。正如您引用的问题中所述,这取决于 hosts 文件中的内容。这是一个在 Windows 和 Linux 上都有的文件,它告诉操作系统哪些 IP 可以分配给特定的主机名。以下是文件中的示例条目:

127.0.0.1    localhost

这将告诉操作系统,如果我向 localhost 发出请求,只需将请求路由到 127.0.0.1。它类似于 DNS 服务器的作用,但该过程发生在您的计算机上,无需检查互联网。

现在,谈谈为什么该行在不同平台上发生变化。文档是这样说的:

If this InetAddress was created with a host name, this host name will be remembered and returned; otherwise, a reverse name lookup will be performed and the result will be returned based on the system configured name lookup service. If a lookup of the name service is required, call getCanonicalHostName.

此部分引用 hosts 文件中指定的主机名。在 Linux 系统上,hosts 文件有一个与上面类似的条目(这在 Linux 环境中很常见)。 Java 注意到了这一点,并返回该值而不是 IP。由于 Windows 上没有这样的条目,因此它只是简单地返回 IP。

关于java - Windows 和 Linux 中 InetSocketAddress#getHostName 对于 "127.0.0.1"的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55521964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com