gpt4 book ai didi

java - 使用 NsdServiceInfo 获取 IPv4 和 IPv6 地址?

转载 作者:搜寻专家 更新时间:2023-11-01 09:40:57 28 4
gpt4 key购买 nike

我用的是NSDServiceInfo.getHost()。 getHostAddress() 输出的是IPv4 到IPv6 的设备和路由器。对于设备,我已经可以使用 IPV4,所以我需要 IPv6。以及路由器,我已经可以了,所以我需要 IPV4 IPV6。

我试过的解决方法。但是当他的hostaddress发布IPV4时,退出报错“Not an IPv6 address: [xx, xx, xx, xx]

同时,当它发布 hostaddress IPv6 时,出现错误信息“java.net.Inet6Address cannot be cast to java.net.Inet4Address”

我喜欢这种编码

List <NSDServiceInfo> Data = new ArrayList<>();
InetAddress hostInet =InetAddress.getByName(Data.get(position).getHost().GetHostAddress());
byte [] addressBytes = hostInet.getAddress();

Inet6Address dest6 = Inet6Address.getByAddress(Data.get(position).getHost().GetHostAddress(), addressBytes, NetworkInterface.getByInetAddress(hostInet));
Inet4Address dest4 = (Inet4Address) Inet4Address.getByAddress (Data.get(position).getHost().GetHostAddress(), addressBytes);
Log.d ( "IP", "IPv4" + dest4.getHostAddress ());
Log.d ( "IP", "IPv6:" + dest6.getHostAddress ());

最佳答案

首先通过给定主机名使用静态函数获取InetAddress对象

InetAddress hostInet= InetAddress.getByName(hostNameString);

现在我们需要使用hostInet 的字节数组表示

byte [] addressBytes = hostInet.getAddress();

现在您可以使用此addressBytesInet6AddressInet4AddressgetByAddress 格式化为IPv4 或IPv6另外,您需要使用 getByInetAddress 传递主机名、字节地址和网络接口(interface)功能

Inet6Address dest = Inet6Address.getByAddress(hostNameString, addressBytes, NetworkInterface.getByInetAddress(hostInet));

Inet4Address dest = Inet4Address.getByAddress(hostNameString, addressBytes, NetworkInterface.getByInetAddress(hostInet));

现在您可以使用getAddress 检索dest 对象的文本或字节表示形式|或 getHostAddress功能

关于java - 使用 NsdServiceInfo 获取 IPv4 和 IPv6 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39870984/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com