繁体   English   中英

有没有一种简单的方法可以在Java中将String转换为Inetaddress?

[英]Is there an easy way to convert String to Inetaddress in Java?

我正在尝试将字符串转换为Inetaddress 我不是要解析主机名:字符串是ipv4地址。 InetAddress.getByName(String host)是否有效? 或者我必须手动解析它?

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

是的,那会有效。 API非常明确(“主机名可以是机器名,例如”java.sun.com“,也可以是其IP地址的文本表示。”),当然您可以轻松检查自己。

注意:似乎解析一个无效的地址,如InetAddress.getByName("999.999.999.999"不会导致异常,因为人们可能会从文档的短语中得到:

检查地址格式的有效性

根据经验,我发现自己获得了一个InetAddress实例,其中包含本地计算机的原始IP地址和无效的IP地址作为主机名。 当然这不是我的预期!

在将String传递给getByName()之前,您可以尝试使用正则表达式过滤掉非数字IP地址 然后getByName()不会尝试名称解析。

开源IPAddress Java库将验证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
      }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM