在 Java 中获取主机名的推荐方法
以下哪项是获取Java中当前计算机主机名的最佳和最便携的方法?
Runtime.getRuntime().exec("hostname")
与
InetAddress.getLocalHost().getHostName()
以下哪项是获取Java中当前计算机主机名的最佳和最便携的方法?
Runtime.getRuntime().exec("hostname")
与
InetAddress.getLocalHost().getHostName()
严格来说 - 你别无选择,只能在Unix上调用或 - 。这是您的计算机的名称。任何通过类似如下 IP 地址确定主机名的尝试hostname(1)
gethostname(2)
InetAddress.getLocalHost().getHostName()
在某些情况下必然会失败:
也不要将 IP 地址的名称与主机的名称(主机名)混淆。一个比喻可能会让它更清楚:
有一个大城市(服务器)叫做“伦敦”。在城墙内,很多生意都发生了。这个城市有几个大门(IP地址)。每个门都有一个名字(“北门”,“河门”,“南安普敦门”...),但门的名称不是城市的名称。此外,您也无法通过使用门的名称来推断城市的名称 - “北门”将捕获一半的大城市,而不仅仅是一个城市。然而 - 一个陌生人(IP数据包)沿着河边走,问当地人:“我有一个奇怪的地址:'河门,左二,第三宫'。你能帮帮我吗?当地人说:“当然,你走在正确的路上,只要继续前进,你就会在半小时内到达目的地。
我认为这几乎说明了这一点。
好消息是:通常不需要真正的主机名。在大多数情况下,任何解析为该主机上的IP地址的名称都可以(陌生人可能会通过Northgate进入城市,但有用的当地人会翻译“左二”部分。
在其余的角落情况下,您必须使用此配置设置的最终来源 - 即 C 函数 。该函数也由程序调用。gethostname(2)
hostname
InetAddress.getLocalHost().getHostName()
是更便携的方式。
exec("hostname")
实际上调用操作系统来执行命令。hostname
以下是关于SO的其他几个相关答案:
编辑:您应该查看A.H.的答案或Arnout Engelen的答案,以了解为什么这可能无法按预期工作的详细信息,具体取决于您的情况。作为这个专门要求便携式的人的答案,我仍然认为很好,但是他们提出了一些应该考虑的好点。getHostName()