如何在Android上连接到IPv6地址?

时间:2013-11-25 06:53:52

标签: android ipv6 google-tv

在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限制?

3 个答案:

答案 0 :(得分:3)

由于您使用的是Android 3.2,因此不支持ipv6

点击此处https://android.stackexchange.com/questions/3718/does-android-have-support-for-ipv6

答案 1 :(得分:0)

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

您还可以提供IPV6主机名。

答案 2 :(得分:0)

如果你构建[来自部分的新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)