В моем заявлении о проблеме говорится, что я могу получить либо адрес IPv4, либо v4-отображаемый адрес v6 в качестве экземпляра InetSocketAddress. Если это v4-отображаемый адрес v6, я должен получить адрес v4 и использовать его.Пытается получить IPv4-адрес из заданного IPv4-адреса IPv6-адреса
Я читал Javadoc из InetAddresses и это то, что он говорит:
`Technically one can create a 128bit IPv6 address with the wire format of a
"mapped" address, as shown above, and transmit it in an IPv6 packet header.
However, Java's InetAddress creation methods appear to adhere doggedly to the
original intent of the "mapped" address: all "mapped" addresses return
Inet4Address objects.`
я могу определить, если полученный адрес является v4 отображенные v6 адрес, используя один методов из этой библиотеки, как это:
// Input is InetSocketAddress socketAddress
if (InetAddresses.isMappedIPv4Address(socketAddress.getAddress().getHostAddress())) {
System.out.println("This is a v4 mapped v6 address");
}
в соответствии с документацией ни одна из библиотек (InetSocketAddress, InetAddress или InetAddresses) обеспечивает способ получения адреса IPv4 от такого отображенного ввода. Значит ли это, что листинг типа InetAddress, полученный от InetSocketAddress до Inet4Address, будет достаточным?
Inet4Address inetAddress = (Inet4Address) socketAddress.getAddress();
Если да, то я даже не нужно использовать InetAddresses.isMappedIPv4Address? Как я могу определить, не сработало ли кастинг или данный адрес не является допустимым адресом IPv4 или адресом v6 с отображением v4, поэтому я могу сделать соответствующее исключение?