Почему 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 'имя хоста' на удаленном компьютере показывает:
7015/udp open|filtered unknown
Теперь, когда я запускаю клиентскую java-программу на устройстве Android и отправляю дейтаграмму, она работает без сбоев под Wi-Fi, но не через сотовую сеть - после выключения Wi-Fi или перемещения устройства за пределы диапазона Wi-Fi. Кроме возможной блокировки портов провайдером, почему этот сокет работает под Wi-Fi, а не GPRS?
1 ответ
Провайдеры сотовой связи делают странные вещи со своими политиками формирования трафика. Я готов поспорить, что они отбрасывают UDP. Я знаю, что некоторые сети и провайдеры имеют прозрачный прокси-сервер между вашей трубкой и сетью, который делает некоторые "непослушные" перезаписи вещей в пакеты. Иногда они переписывают пакеты и подменяют TCP-квитирование, чтобы вещи загружались быстрее.
В этом случае, держу пари, они молча отбрасывают этот трафик. Там, наверное, все, что вы можете с этим поделать. Когда я пишу приложения для Android, я стараюсь изо всех сил убедиться, что все соединения с хостом осуществляются через HTTP в форме RESTful API, так что в большинстве случаев он выглядит как обычное веб-соединение.,