Назад | Перейти на главную страницу

Почему сокет UDP нормально работает в Wi-Fi, но не в сотовой сети?

Нубийский вопрос -

У меня есть сценарий perl, работающий на сервере Linux, который открывает порт UDP 7015. netstat -ulnp показывает:

udp        0      0 0.0.0.0:7015                0.0.0.0:*                               16365/perl

nmap -sU -p 7015 'hostname' на удаленной машине показывает:

7015/udp open|filtered unknown

Теперь, когда я запускаю клиентскую java-программу на устройстве Android и отправляю дейтаграмму, она работает безупречно под Wi-Fi, но не через сотовую сеть - после того, как Wi-Fi отключен или устройство перемещено из диапазона Wi-Fi. Помимо возможной блокировки порта провайдером, почему этот сокет будет работать под Wi-Fi, но не с GPRS?

Провайдеры сотовых сетей делают некоторые странные вещи со своими политиками формирования трафика. Готов поспорить, что они отказываются от UDP. Я знаю, что у некоторых сетей и провайдеров есть прозрачный прокси-сервер между вашим телефоном и сетью, который делает некоторую «непослушную» перезапись пакетов. Иногда они переписывают пакеты и подделывают рукопожатие TCP, чтобы казалось, что все загружается быстрее.

В этом случае я могу поспорить, что они тихо отбрасывают этот трафик. Вероятно, есть все, что вы можете с этим поделать. Когда я пишу приложения для Android, я изо всех сил стараюсь убедиться, что все подключения к хосту осуществляются через HTTP в форме RESTful API, чтобы он выглядел для большинства целей и задач, как обычное веб-соединение. .