Я разрабатываю интерфейс Java между сервером потоковой передачи и клиентом флэш-памяти. Я заметил, что датаграммы UDP могут достигнуть моего интерфейса не в порядке, даже если оба процесса работают локально.
Это нормально? Я думал, что, поскольку никакая датаграмма не должна проходить маршрутизатор или любое сетевое устройство, затем этого не должно происходить.
На самом деле нет никаких гарантий заказа и приема О UDP-пакетах, даже если они отправляются localhost на localhost. Просто потому, что спецификация протокола ничего не подразумевает.
Поскольку вы не можете делать предположения на их основе, вы должны использовать TCP или обрабатывать переупорядочивание с помощью порядкового номера, обрабатываемого вашими программами.
Это будет зависеть от операционной системы. Хотя вы не указали операционную систему, это все равно не важно. Чтобы оставаться переносимым, вы всегда должны ожидать, что ваши датаграммы будут получать данные не по порядку.
UDP не указан для сохранения последовательности, как все сказано на плакатах выше, но если нет промежуточных маршрутизаторов, я также подозреваю ошибку в вашем код.
Несмотря на то, что вы используете localhost, ожидайте, что датаграммы UDP будут не последовательными в фактическом развертывании.
Если они нужны последовательно, попробуйте TCP.