23

我有一个可变数据包类型DatagramPacket。虽然packet.getAddress().toString()结果是一个表示 IP 地址的字符串,但它/在字符串的开头附加了一个额外的内容:

/127.0.0.1

我可以轻松删除前导'/',但是有没有更好的方法来获取 IP 的字符串表示形式?'/'我很担心,因为如果在其他情况下还有更多怎么办。

谢谢!

4

2 回答 2

32

使用以下内容:

packet.getAddress().getHostAddress()

文档中:

以文本形式返回 IP 地址字符串。

与之对比InetAddress.toString()

将此 IP 地址转换为String. 返回的字符串格式为:主机名/文字 IP 地址。如果主机名未解析,则不执行反向名称服务查找。主机名部分将由一个空字符串表示。

于 2012-10-18T05:04:16.973 回答
7

如果您只想要 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 使这两个字段在本质上是分开的。

于 2012-10-18T05:13:21.170 回答