【问题标题】:How can I connect to an IPv6 address on Android?如何在 Android 上连接到 IPv6 地址?
【发布时间】:2013-11-25 06:53:51
【问题描述】:

在 Android 上,我使用 HttpClient 连接到这样的网址:

String url = "http://[fe80::1cef:49e7:2661:ffda]:7001/a.MOV";
HttpParams httpParameters = new BasicHttpParams();
HttpClient client = new DefaultHttpClient(httpParameters);
HttpGet httpGet = new HttpGet(url);
HttpResponse response = client.execute(httpGet);

在输入标准 URL 或具有 v4 IP 地址的 URL 时,该代码可以正常工作。但是,当我使用 v6 地址时,上述代码的最后一行将失败并抛出 java.net.SocketException: Invalid argument

为了说明,而这个地址:

http://192.168.1.2:7001/a.MOV

可以正常工作,这个:

http://[fe80::1cef:49e7:2661:ffda]:7001/a.MOV

根本不起作用。

可以肯定的是,我也尝试使用较新的HttpURLConnection 进行连接,但仍然会引发相同的异常。

我目前正在运行 Android 3.2 版的 Google TV 设备上进行测试。

那么我做错了什么吗?如果没有,有什么方法可以解决 Android 的这种明显限制?

【问题讨论】:

  • 使用本地链接地址(以fe..: 开头)时,您必须指定要使用的链接。所以它可能类似于http://[fe80::1cef:49e7:2661:ffda%eth0]:7001/a.MOV。如果可能,最好使用全球地址或 ULA 地址。

标签: android ipv6 google-tv


【解决方案1】:

由于你使用的是Android 3.2,所以不支持ipv6

在这里查看https://android.stackexchange.com/questions/3718/does-android-have-support-for-ipv6

【讨论】:

  • 看起来就是这样,因为我继续尝试越来越多的东西。有没有办法解决这种事情?还是我真的卡住了?
  • 我觉得你卡住了,因为你的android版本太旧了,没有解决办法,也许你可以升级
【解决方案2】:

尝试使用HttpGet(URI uri) 构造函数。 在URI 对象中定义地址。看看这里的例子: http://developer.android.com/reference/java/net/URI.html

您还可以提供 IPV6 主机名。

【讨论】:

    【解决方案3】:

    如果您改为构建 [一个新的 URL 从部件][1],您应该能够将它提供到您的 HttpGet 中而不会出现任何问题。

    你要找的构造函数是:

    new URL(java.lang.String, java.lang.String, int, java.lang.String)
    

    (请原谅格式,我正在打电话。)

    [1]:http://developer.android.com/reference/java/net/URL.html#URL(java.lang.String, java.lang.String, int, java.lang.String)

    【讨论】:

    • 不,不起作用。我什至尝试使用 InetAddress 创建一个套接字,但即使这样也行不通(同样的错误)。
    • 如果您仍然收到无效参数作为 SocketException,这似乎表明该设备可能不支持 IPv6。如果是连接问题,可能是您的网络基础设施不支持 IPv6?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2016-05-30
    • 2013-05-25
    • 2012-04-11
    • 2018-12-04
    • 2020-02-20
    相关资源
    最近更新 更多