如何在java中使用Inet6Address

时间:2013-01-29 08:41:22

标签: java netty

我再一次需要一些关于如何在java上使用Inet6Address的小帮助。

当我开发一个获取IPv4地址的应用程序但现在我想将它扩展到IPv6。而且似乎我无法获得IPv6地址并且它会继续获取IPv4地址。

我尝试导入java.net.Inet6Address;

使用我现有的代码,如下所示。

public SocketAddress getInetAddress(){
   return channel.getRemote();
}

频道正在使用netty项目。

我如何处理Inet6Address?

正如我在网上找到的那样 http://docs.oracle.com/javase/1.4.2/docs/api/java/net/Inet6Address.html

public InetSocketAddress getInetAddress(){
   Inet6Address ipv6 = (Inet6Address)channel.getRemoteAddress.**getAddress();**

    return channel.getRemote();
}

我是否也可以询问.getAddress()是否无法使用,任何人都可以帮我解决这个问题吗?

我需要下载一个jar文件来处理这个问题吗?

我正在使用的java版本是java 6。

来自Swift

2 个答案:

答案 0 :(得分:1)

如果你没问题 - 尝试使用

Java-ipv6

答案 1 :(得分:0)

channel的类型是什么?从未使用'netty',但在sun的nio世界中,假设saSocketAddress的实例,只需使用sa.getAddress()。如果sa表示IPv4地址上的套接字,则当它是IPv6地址上的套接字时,您将获得Inet4AddressInet6Address的实例。

添加一些IPv6绑定代码:

InetAddress[] addresses = InetAddress.getAllByName("localhost");
Inet6Address add6 = null;
for(InetAddress add : addresses) { 
    if (add instanceof Inet6Address) {
        add6 = add;
        break;
    }
}
if (add6==null)
    throw new RuntimeException("no IPv6 local address found!");
InetSocketAddress sa=new InetSocketAddress(add6, port);
...