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