Нубийский вопрос -
У меня есть сценарий 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, чтобы он выглядел для большинства целей и задач, как обычное веб-соединение. .