Почему я получаю UDP-дейтаграммы не в порядке, даже если процессы выполняются локально? - PullRequest
12 голосов
/ 28 марта 2010

Я разрабатываю Java-интерфейс между потоковым сервером и Flash-клиентом. Я заметил, что дейтаграммы UDP могут достигать моего интерфейса не в порядке, даже если оба процесса работают локально.

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

Ответы [ 4 ]

8 голосов
/ 28 марта 2010

Это будет зависеть от операционной системы.Хотя вам не удалось указать операционную систему, это все равно не важно.Чтобы оставаться переносимым, вы всегда должны ожидать получения сокетов дейтаграмм из данных заказа.

7 голосов
/ 28 марта 2010

На самом деле нет никаких гарантий упорядочения и приема пакетов UDP, даже если они отправлены localhost на localhost. Просто потому, что спецификация протокола ничего не говорит об этом.

Поскольку вы не можете делать предположения относительно них, вы должны выбрать TCP или переупорядочить, используя порядковый номер, обрабатываемый вашими программами.

2 голосов
/ 28 марта 2010

Несмотря на то, что вы используете localhost, ожидайте, что дейтаграммы UDP будут не последовательными в реальном развертывании.

Если они нужны вам последовательно, попробуйте TCP.

0 голосов
/ 29 марта 2010

UDP не указан для сохранения последовательности, как уже было сказано выше, но если промежуточных маршрутизаторов нет, я бы также подозревал ошибку в вашем коде.

...