我使用了NSDServiceInfo.getHost()。 getHostAddress()输出是IPv4到IPv6设备和路由器。对于设备,我已经可以IPV4所以我需要IPv6。以及路由器,我已经可以这样,我需要IPV4 IPV6。
我尝试过的解决方案。但当他的hostaddress发出IPV4,然后退出错误"不是IPv6地址:[xx,xx,xx,xx]
同时,当它发出hostaddress IPv6时,错误消息" java.net.Inet6Address无法强制转换为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 ());
答案 0 :(得分:2)
首先通过提供主机名
,使用静态函数获取InetAddress
对象
InetAddress hostInet= InetAddress.getByName(hostNameString);
现在我们需要使用hostInet
byte [] addressBytes = hostInet.getAddress();
现在,您可以使用此addressBytes
格式为使用Inet6Address
或Inet4Address
Inet6Address dest = Inet6Address.getByAddress(hostNameString, addressBytes, NetworkInterface.getByInetAddress(hostInet));
的IPv4或IPv6,并且需要传递hostName,字节地址和网络接口使用getByAddress函数
Inet4Address dest = Inet4Address.getByAddress(hostNameString, addressBytes, NetworkInterface.getByInetAddress(hostInet));
或
dest
现在,您可以使用getByInetAddress 或getAddress函数检索yield
对象的文本或字节表示
答案 1 :(得分:0)
班级NsdServiceInfo
的方法getHostAddress()
是java.net.InetAddress的类型。 IP地址的文本表示是地址族特定的:
这两个类都扩展了InetAddress
。您需要一个方法public String getHostAddress()
,它在文本演示文稿中返回IP地址字符串。
答案 2 :(得分:0)
这是我的错,因为没有完成询问。所以我使用了NSDServiceInfo.getHost()。 getHostAddress()输出是IPv4到IPv6设备和路由器。对于设备,我已经可以IPV4所以我需要IPv6。以及路由器,我已经可以这样,我需要IPV4 IPV6。
我尝试过的解决方案。但当他的hostaddress发出IPV4,然后退出错误&#34;不是IPv6地址:[xx,xx,xx,xx]
同时,当它发出hostaddress IPv6时,错误消息&#34; java.net.Inet6Address无法强制转换为java.net.Inet4Address&#34;
我喜欢这个编码
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 ());
抱歉,如果我的英语不好
谢谢