2013-06-25 2 views
2

Я делаю обычную загрузку HttpUrlConnection для извлечения данных в свое приложение, но я обнаруживаю проблемы в определенных сетях.Принуждение HttpUrlConnection только к ipv4

Эти сети назначают IPv6-адреса устройствам, даже если сети не работают должным образом с ipv6. Конечно, Android выходит из ipv6 на ipv4.

В Jellybean (4.2.2) переход на другой ресурс занимает около минуты, что слишком долго для мобильного приложения. У нас нет прямого контроля над этими сетями.

Если я могу заставить HttpUrlConnection использовать только ipv4, все будет хорошо, но я не нашел способа сделать это. Кто-нибудь еще?

+1

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

ответ

1

Пожалуйста, не заставляйте приложение использовать IPv4. Мы развертываем сети, в которых есть только подключение к IPv6 (с NAT64/DNS64), и приложения с поддержкой IPv4 будут разбиты на такие сети. В мире заканчиваются неиспользуемые адреса IPv4, а части мира (Азия, Европа, Ближний Восток) уже вышли.

Чтобы решить эту проблему, просмотрите RFC 6555: Happy Eyeballs. В нем описывается алгоритм, который сначала будет проверять IPv6, но быстро возвращается к IPv4, так что пользователь вряд ли его заметит (или обычно этого вообще не замечает).

К сожалению, я не знаю о хорошей реализации Java, которую вы можете использовать на Android, но я надеюсь, что другие смогут указать вам в правильном направлении. (или вы можете первыми написать реализацию с открытым исходным кодом и добиться успеха и славы таким образом (ну, по крайней мере, слава;))

+0

Также посмотрите http://stackoverflow.com/questions/16164175/using-ipv6-in-a-real-world-java-program –

+0

Этот вопрос по-прежнему нуждается в хорошем ответе _ с кодом_. –

+0

Майкл: это так, поэтому я прямо сказал об этом. Вы знаете пример реализации на Java? Мои навыки Java слишком ржавые :( –