【问题标题】:Java: Convert a String (representing an IP) to InetAddress [duplicate]Java:将字符串(表示 IP)转换为 InetAddress [重复]
【发布时间】:2011-07-31 02:45:02
【问题描述】:

可能重复:
Is there an easy way to convert String to Inetaddress in Java?

我正在尝试将字符串(表示 IP 地址,例如 10.0.2.50)转换为 InetAddress obj。

根据 API,可以创建一个提供表示主机名的字符串的对象(例如 www.google.ch)。这对我来说不是一个选项,因为我没有要创建的每个 InetAddress 对象的主机名(除了它花费的时间太长)。

是否可以将字符串(例如10.0.2.50)转换为InetAddress obj.? (根据api,如果您的IP为byte[],则可以这样做,但是如何将包含IP的String转换为byte[]?)

【问题讨论】:

  • 没找到这个,确实是同样的问题。

标签: java ip inetaddress


【解决方案1】:

只需调用 InetAddress.getByName(String host) 并传入您的文本 IP 地址。

来自 javadoc:主机名可以是机器名,例如“java.sun.com”,也可以是其 IP 地址的文本表示。

InetAddress javadoc

【讨论】:

  • 使用这个的人请注意,如果 IP 地址无效,则查找的超时时间足够长,重复执行会导致程序运行缓慢。
  • 如果您只想解析 IP 地址,这是个坏主意,因为 getByName 也会进行主机名查找。如果将主机名传递给您的函数,您将在不打算做的地方进行同步网络 I/O。
  • @GlennMaynard:实际的 JDK 代码检查第一个字符是否为数字,如果是,则使用 IPAddressUtil 解析它。
  • @AndrisBirkmanis 但是,如果有人传入主机名(例如,因为您正在解析配置文件或类似文件),则不会发生这种情况。如果你只打算解析一个IP地址,那么你应该使用一个只解析IP地址的函数。
  • IPAddressUtil in sun.net.util 是最好的选择。但是我们应该注意这个oracle.com/java/technologies/faq-sun-packages.html
【解决方案2】:

来自InetAddress.getByName(String host)的文档:

主机名可以是机器 名称,例如“java.sun.com”,或 其 IP 的文本表示 地址。如果文字 IP 地址是 提供,只有的有效性 地址格式已检查。

所以你可以使用它。

【讨论】:

    猜你喜欢
    • 2015-01-17
    • 2012-10-28
    • 1970-01-01
    • 2019-05-13
    • 2010-12-29
    • 2014-01-07
    • 2016-07-07
    • 2016-11-23
    • 2015-06-22
    相关资源
    最近更新 更多