Java InetSocketAddress在windows和linux中的不同行为;127.0.0.1“; InetAddress.getByName(“127.0.0.1”).getHostName()

Java InetSocketAddress在windows和linux中的不同行为;127.0.0.1“; InetAddress.getByName(“127.0.0.1”).getHostName(),java,networking,Java,Networking,上面的字符串在windows中返回127.0.0.1,但在linux中返回localhost 政府的文件说: 如果此地址是使用主机名创建的,则会记住并返回此主机名;否则,将执行反向名称查找,并根据系统配置的名称查找服务返回结果 这是预期的行为吗 为什么不同的操作系统会出现这种差异 linux和windows的名称查找服务是不同的吗?这就是我们看到这种行为差异的原因吗 我已经看到了,但我的问题是关于windows和linux中API行为的差异以及这种差异的原因。因此,windows和linux

上面的
字符串在windows中返回
127.0.0.1
,但在linux中返回
localhost

政府的文件说:

如果此地址是使用主机名创建的,则会记住并返回此主机名;否则,将执行反向名称查找,并根据系统配置的名称查找服务返回结果

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

我已经看到了,但我的问题是关于windows和linux中API行为的差异以及这种差异的原因。

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

127.0.0.1    localhost
这将告诉操作系统,如果我向
localhost
发出请求,只需将请求路由到
127.0.0.1
。这与DNS服务器的工作类似,但该过程在您的计算机上进行,而不检查internet

现在,谈谈为什么这条线在不同的平台上会发生变化。文件上说:

如果此地址是使用主机名创建的,则会记住并返回此主机名;否则,将执行反向名称查找,并根据系统配置的名称查找服务返回结果。如果需要查找名称服务,请调用getCanonicalHostName


本节指的是
hosts
文件中指定的主机名。在您的Linux系统上,
hosts
文件有一个类似于上面的条目(这在Linux环境中非常常见)。Java注意到这一点,并返回它,而不是IP。因为Windows上没有这样的条目,所以它只返回IP。

引号是不相关的。此
InetAddress
是使用IP地址而不是主机名构建的。