我有一个可变数据包类型DatagramPacket
。虽然packet.getAddress().toString()
结果是一个表示 IP 地址的字符串,但它/
在字符串的开头附加了一个额外的内容:
/127.0.0.1
我可以轻松删除前导'/'
,但是有没有更好的方法来获取 IP 的字符串表示形式?'/'
我很担心,因为如果在其他情况下还有更多怎么办。
谢谢!
我有一个可变数据包类型DatagramPacket
。虽然packet.getAddress().toString()
结果是一个表示 IP 地址的字符串,但它/
在字符串的开头附加了一个额外的内容:
/127.0.0.1
我可以轻松删除前导'/'
,但是有没有更好的方法来获取 IP 的字符串表示形式?'/'
我很担心,因为如果在其他情况下还有更多怎么办。
谢谢!
使用以下内容:
packet.getAddress().getHostAddress()
从文档中:
以文本形式返回 IP 地址字符串。
将此 IP 地址转换为
String
. 返回的字符串格式为:主机名/文字 IP 地址。如果主机名未解析,则不执行反向名称服务查找。主机名部分将由一个空字符串表示。
如果您只想要 IP,请使用主机地址:
String address = InetAddress.getByName("stackoverflow.com").getHostAddress();
如果您只想要主机名,请使用
String hostname = InetAddress.getByName("stackoverflow.com").getHostName();
您看到的斜线可能是当您尝试打印返回的 InetAddress 时对返回的 InetAddress 执行隐式 toString() 时,它会打印由斜线分隔的主机名和地址(例如 stackoverflow.com/64.34.119.12)。你可以使用
String address = InetAddress.getByName("stackoverflow.com").toString().split("/")[1];
String hostname = InetAddress.getByName("stackoverflow.com").toString().split("/")[0];
但是这里根本没有理由去 String 中介。InetAddress 使这两个字段在本质上是分开的。