2013-10-15 4 views
0

Я пытаюсь связаться с UDP-сервером с небольшого кода Java на устройстве Android. При подключении к домашнему wi-fi интернету с сервером связывается и отвечает на пакет с данными, которые затем доходят до устройства.udp пакеты не возвращаются к устройству

Однако при подключении к мобильной сети выполняется одна и та же программа, пакеты DO делают ее , но пакет ответа сервера теряется. Кроме того, можно сказать, что мобильный оператор телефона решает заблокировать входящий UDP-трафик или что-то в этом роде, но я протестировал и попытался получить доступ к моему домашнему серверу, а не к предыдущему, и пакет UDP вернулся!

Итак, давайте подведем итог: мобильная сеть отправляет UDP-пакеты без проблем, но некоторые из IP-пакетов получат отложенные пакеты ответа. Я что-то упускаю? Есть ли общий UDP-порт, который должен использоваться для предотвращения этого? И как популярные приложения UDP не испытывают таких проблем?

ответ

1

Вы не указали, с какого носителя или страны вы находитесь. Но многие мобильные сети реализуют carrier-grade-NAT (двойные NAT-соединения), что может быть основной причиной.

Вы не описали протокол, который используете. Но способ, которым протокол UDP надежно работает между клиентом и сервером, заключается в том, что клиент НЕ укажет, какой локальный порт должен отвечать в протоколе. Скорее, UDP-сервер отвечает обратно, используя адрес API сокета, на который был отправлен пакет. Клиент UDP прослушивает один и тот же порт и сокет, откуда он отправил сообщение на сервер.