使用NsdServiceInfo获取IPv4和IPv6地址?

时间:2016-10-05 10:01:05

标签: java android nsd

我使用了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 ());

3 个答案:

答案 0 :(得分:2)

首先通过提供主机名

,使用静态函数获取InetAddress对象
InetAddress hostInet= InetAddress.getByName(hostNameString);

现在我们需要使用hostInet

的字节数组表示
byte [] addressBytes = hostInet.getAddress();

现在,您可以使用此addressBytes格式为使用Inet6AddressInet4Address 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 ());
抱歉,如果我的英语不好 谢谢