【问题标题】:Forcing HttpUrlConnection to ipv4 only仅强制 HttpUrlConnection 到 ipv4
【发布时间】:2013-06-25 19:35:34
【问题描述】:

我正在执行典型的 HttpUrlConnection 下载以将数据提取到我的应用程序中,但我在某些网络上发现了问题。

这些网络正在为设备分配 ipv6 地址,即使这些网络无法正常使用 ipv6。当然,Android 从 ipv6 故障转移到 ipv4。

在 Jellybean (4.2.2) 中,故障转移需要将近一分钟,这对于移动应用程序来说太长了。我们没有直接控制这些网络。

如果我可以强制 HttpUrlConnection 只使用 ipv4 一切都会好起来的,但我发现没有办法做到这一点。还有其他人吗?

【问题讨论】:

  • 在制定解决方案时,还要确保您的客户知道是他们的移动运营商造成了问题。

标签: android ipv6


【解决方案1】:

请不要强制应用程序使用 IPv4。我们正在部署具有纯 IPv6 连接(使用 NAT64/DNS64)的网络,纯 IPv4 应用程序将在此类网络上中断。世界上未使用的 IPv4 地址即将用完,世界部分地区(亚洲、欧洲、中东)已经用完。

要解决这个问题,请查看RFC 6555: Happy Eyeballs。它描述了一种算法,该算法将首先尝试 IPv6,但很快又退回到 IPv4,以至于用户几乎不会注意到它(或者通常根本不会注意到它)。

很遗憾,我不知道可以在 Android 上使用的好的 Java 实现,但我希望其他人能够为您指明正确的方向。 (或者你可以成为第一个编写开源实现并以这种方式获得财富和名望的人(嗯,至少是名声;))

【讨论】:

  • Michael:确实如此,这就是我明确提到的原因。您知道 Java 中的示例实现吗?我的 Java 技能太生疏了 :(
  • 不,Google 也没有。据我回忆,Java 只是隐藏了太多实现这一点所需的低级内容。
  • 那不好。这意味着开发人员唯一能做的就是System.setProperty("java.net.preferIPv4Stack" , "true");,我怀疑这是否会在 Android 上被允许......
  • 如果移动运营商能正确地使用 IPv6 而不是像 464xlat 之类的所有这些过渡废话,那将会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2019-05-02
  • 2016-01-07
  • 2011-11-28
  • 1970-01-01
  • 2021-06-30
  • 2013-09-18
  • 1970-01-01
  • 2012-06-22
相关资源
最近更新 更多