2013-11-25 4 views
2

на Android, я использую HttpClient для подключения к веб-адрес, как так:Как подключиться к IPv6-адресу на Android?

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-адрес. Тем не менее, когда я использую адрес v6, последняя строка вышеуказанного кода будет сбой при запуске java.net.SocketException: Invalid argument.

Для иллюстрации, в то время как этот адрес:

http://192.168.1.2:7001/a.MOV

будет работать без проблем, это одна:

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

не будет работать вообще.

Чтобы убедиться в этом, я также попытался использовать новый HttpURLConnection, и это все равно приводит к тому же исключению.

В настоящее время я выполняю тестирование на устройстве Google TV под управлением Android версии 3.2.

Так что-то я делаю неправильно? А если нет, есть ли способ обойти это очевидное ограничение Android?

+3

При использовании локальных локальных адресов (начиная с 'fe ..:'), вы должны указать ссылку, которую хотите использовать. Таким образом, это может быть что-то вроде 'http: // [fe80 :: 1cef: 49e7: 2661: ffda% eth0]: 7001/a.MOV'. Лучше использовать глобальные адреса или ULA-адреса, если это возможно. –

ответ

3

Поскольку вы используете Android 3.2 Он не будет поддерживать ipv6

Проверить здесь https://android.stackexchange.com/questions/3718/does-android-have-support-for-ipv6

+0

Похоже, это так, потому что я продолжаю все больше и больше делать. Есть ли способ обойти это? Или я действительно застрял? – yydl

+0

Я думаю, что вы застряли, theres нет обходного пути, так как ваша версия Android старая, возможно, вы можете обновить –

0

Если вы создали [новый URL-адрес из частей] [1], вы можете без проблем предоставить его в свой HttpGet.

Конструктор вы ищете это:

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

(Pardon форматирование, я по телефону.)

[1]: http://developer.android.com/reference/java/net/URL.html#URL(java.lang.String, java.lang.String, внутр , java.lang.String)

+0

Нет, не работает. Я даже попытался создать сокет с InetAddress, и даже это не сработает (такая же ошибка). – yydl

+0

Если вы все еще получаете недопустимый аргумент как исключение SocketException, похоже, что устройство может не поддерживать IPv6. Если это проблема подключения, возможно, ваша сетевая инфраструктура не поддерживает IPv6? –