11

我正在开发一个 Android 应用程序,我需要使用 IPv6 连接到服务器。

电话上启用了 IPv6,我可以看到我的本地 IPv6 地址ip addr。我也可以ping6从 PC 上成功地使用我的手机,反之亦然。

但是当我尝试通过 Java 命令获取 Android 上的本地地址时,NetworkInterface.getNetworkInterfaces()我只能获取 IPv4 地址。

我也尝试打开客户端套接字,但线路 Socket s = new Socket(MYSERVERIPV6ADDRESS, PORT); 总是抛出java.net.SocketException: Invalid argument. 我确定地址是正确的,因为我在计算机上尝试使用相同的代码并且运行良好。

似乎操作系统支持 IPv6,但 Java 虚拟机不支持。有没有办法解决这个问题?

4

2 回答 2

2

在 Inet6Address 中使用此静态方法为您的地址获取 Inet6Address 对象,

Inet6Address getByAddress (String host, byte[] addr, int scope_id)

然后使用以下套接字构造函数来获取套接字,

套接字(InetAddress dstAddress,int dstPort)。

于 2012-05-12T11:31:24.243 回答
1

IP6 支持是供应商的选择,据我了解,支持是存在的。

我假设您正在模拟器中测试您的应用程序。看看 android 是如何联网的, http://developer.android.com/guide/developing/devices/emulator.html#emulatornetworking 它位于地址为 10.0.2.1 的 IPv4 路由器后面。因此,您无法使用 IPv6 打开 Socket。这完全取决于是否存在从您的手机到目的地的所有与 IPv6 兼容的路由器的路径。

于 2012-05-12T11:48:45.213 回答