【问题标题】:Android and IPv6 in JavaJava 中的 Android 和 IPv6
【发布时间】:2012-05-20 17:43:20
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 更新:使用Socket s = new Socket(MYSERVERIPV6ADDRESS+"/64%eth0", PORT); 会抛出java.net.SocketException: Unknown host exception

标签: java android sockets ipv6


【解决方案1】:

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

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

然后使用,下面的socket构造函数来获取一个socket,

Socket(InetAddress dstAddress, int dstPort)。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不,我在 Galaxy SII 上进行测试。手机支持 IPv6,因为我可以在 PC 上成功ping6 手机,反之亦然。
    猜你喜欢
    • 2013-09-12
    • 2017-04-05
    • 1970-01-01
    • 2012-08-12
    • 2017-01-26
    • 2015-02-01
    • 2010-10-08
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多