2013-11-25 30 views
2

在Android上,我使用HttpClient连接到一个网络地址,像这样:输入标准的URL的时候,还是一个有v4的IP地址如何连接到Android上的IPv6地址?

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); 

的代码工作正常。但是,当我使用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

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

回答

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)

+0

不行,不起作用。我甚至试着用InetAddress创建一个套接字,甚至不会工作(同样的错误)。 – yydl

+0

如果您仍然收到SocketException的无效参数,那么似乎表明设备可能不支持IPv6。如果它是一个连接问题,也许你的网络基础设施不支持IPv6? –