2016-10-05 6 views
2

Я использовал NSDServiceInfo.getHost(). Выход getHostAddress() - это устройство IPv4 и IPv6 и маршрутизатор. для устройства я уже могу IPV4, поэтому мне нужен IPv6. как и к маршрутизатору, я уже могу, поэтому мне нужен IPV4 IPV6.Получите адрес IPv4 и IPv6, используя NsdServiceInfo?

Решение, которое я пробовал. но когда его 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

Класс NsdServiceInfo имеет метод getHostAddress(), который является типом java.net.InetAddress и текстовое представление IP-адрес является адресом семьи специфичны.:

  • для формата адреса IPv4, см. Inet4Address;
  • для формата адреса IPv6, см. Inet6Address.

Оба этих класса распространяются на InetAddress. Вам нужен метод public String getHostAddress(), который возвращает строку IP-адреса в текстовом представлении.

+0

спасибо за решение. Сожалеем может быть более конкретным, чтобы его новый метод? Спасибо –

1

Первый принести InetAddress объект, используя статическую функцию, давая имя

InetAddress hostInet= InetAddress.getByName(hostNameString); 

хоста Теперь нам нужно представление байт массива с помощью hostInet

byte [] addressBytes = hostInet.getAddress(); 

Теперь вы можете использовать этот addressBytes в формате, как IPv4 или IPv6 с использованием Inet6Address или Inet4Address с getByAddress плюс вам необходимо передать имя хоста, адрес байта и сетевой интерфейс, используя getByInetAddress func Тион

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

или

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

Теперь вы можете получить текст или представление байта dest объекта с помощью getAddress или getHostAddress функций

+0

спасибо за Я попробовал. Извините, я отправил свой ответ. Я снова попросил его помочь. –

0

это моя вина не полной спрашивать. поэтому я использовал 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()); 

извините, если мой английский плохо спасибо