InetAddress.getByName("127.0.0.1").getHostName()
上面的String
在Windows中返回127.0.0.1
,但在Linux中返回localhost
。
如果此InetAddress是使用主机名创建的,则该主机名将被记住并返回;否则,将执行反向名称查找,并根据系统配置的名称查找服务返回结果。
我见过this question,但是我的问题是关于Windows和Linux中API的行为差异以及这种差异的原因。
答案 0 :(得分:1)
因此,Windows和Linux之间没有主要区别。不过,两者的配置有所不同。如您所参考的问题所述,它取决于hosts
文件内部的内容。这是Windows和Linux上的文件,它告诉OS可以将哪些IP分配给特定的主机名。这是文件中的示例条目:
127.0.0.1 localhost
这将告诉操作系统,如果我向localhost
发出请求,只需将请求路由到127.0.0.1
。它与DNS服务器的操作类似,但是该过程在您的计算机上进行,而无需检查Internet。
现在,说明为什么该行在不同平台上发生变化。文档说:
如果此InetAddress是使用主机名创建的,则该主机名将被记住并返回;否则,将执行反向名称查找,并根据系统配置的名称查找服务返回结果。如果需要查找名称服务,请调用getCanonicalHostName。
本节是指hosts
文件中指定的主机名。在您的Linux系统上,hosts
文件具有一个类似于上述条目的条目(在Linux环境中非常常见)。 Java注意到了这一点,并返回了它而不是IP。由于Windows上没有此类条目,因此它简单地返回IP。