代码之家  ›  专栏  ›  技术社区  ›  TiansHUo

在Java中有一种简单的将字符串转换为iNETAdess的方法吗?

  •  22
  • TiansHUo  · 技术社区  · 15 年前

    我正在尝试将字符串转换为 Inetaddress . 我不想解析主机名:字符串是IPv4地址。做 InetAddress.getByName(String host) 工作?或者我必须手动解析它?

    5 回复  |  直到 8 年前
        1
  •  17
  •   Flow Matt McDonald    9 年前

    com.google.common.net.InetAddresses.forString(String ipString) 这样做更好,因为无论传递给它什么字符串,它都不会进行DNS查找。

        2
  •  14
  •   FujiRoyale    11 年前

    是的,那就行了。 The API 对此非常清楚(“主机名可以是一个机器名,例如“java. Sun.com”,或者它的IP地址的文本表示),”当然,您可以轻松地检查自己。

        3
  •  3
  •   wu-lee Thierry Templier    12 年前

    注意:似乎解析一个无效的地址,例如 InetAddress.getByName("999.999.999.999" 意志 导致异常,正如人们从文档的短语中所预期的那样:

    检查地址格式的有效性

    根据经验,我发现自己得到了一个以本地机器的原始IP地址和无效IP地址作为主机名的inetaddress实例。当然,这不是我所期望的!

        4
  •  1
  •   Community Mohan Dere    8 年前

    你可以试试 using a regular expression to filter-out non-numeric IP addresses 在通过之前 String getByName() . 然后 GETByMeMe() 不会尝试名称解析。

        5
  •  0
  •   Sean F    8 年前

    The open-source IPAddress Java library 将验证ipv6和ipv4的所有标准表示,并且将在不进行DNS查找的情况下进行验证。免责声明:我是那个图书馆的项目经理。

    以下代码将执行您请求的操作:

         String s = "1.2.3.4";
         try {
                IPAddressString str = new IPAddressString(s);
                IPAddress addr = str.toAddress();
                InetAddress inetAddress = addr.toInetAddress(); //IPv4 or IPv6
                if(addr.isIPv4() || addr.isIPv4Convertible()) {//IPv4 specific
                    IPv4Address ipv4Addr = addr.toIPv4();
                    Inet4Address inetAddr = ipv4Addr.toInetAddress();
                    //use address
                }
          } catch(AddressStringException e) {
                //e.getMessage has validation error
          }
    
    推荐文章