为什么即使在本地运行进程,也会无序地获取UDP数据报?

我正在开发流媒体服务器和Flash客户端之间的Java接口。 我注意到即使两个进程都在本地运行,UDP数据报也可能无序到达我的接口。

这是正常的吗? 我认为,由于没有数据报必须经过任何路由器或任何网络设备,因此不应该发生这种情况。

实际上,即使它们是由localhost在localhost上发送的,也无法保证UDP数据包的排序和接收。 仅仅因为协议的规范并不意味着它的任何内容。

由于您无法对它们进行假设,因此您应该选择使用TCP或使用程序处理的序列号来处理重新排序。

这将取决于操作系统。 虽然您未能指定操作系统,但无论如何都不重要。 为了保持可移植性,您应始终预期数据报套接字接收无序数据。

虽然您正在运行localhost,但是在实际部署中期望UDP数据报不按顺序进行。

如果您需要它们,请尝试TCP。

UDP没有指定保留序列,因为上面的海报都说了,但如果没有中间路由器,我也会怀疑你的代码中有错误。