【发布时间】:2010-03-28 17:51:50
【问题描述】:
我正在开发流媒体服务器和 Flash 客户端之间的 Java 接口。我注意到即使两个进程都在本地运行,UDP 数据报也可以无序到达我的接口。
这正常吗?我认为由于没有数据报必须通过任何路由器或任何网络设备,因此不应该发生这种情况。
【问题讨论】:
-
这是个好问题,我也对这可能的原因感兴趣。
我正在开发流媒体服务器和 Flash 客户端之间的 Java 接口。我注意到即使两个进程都在本地运行,UDP 数据报也可以无序到达我的接口。
这正常吗?我认为由于没有数据报必须通过任何路由器或任何网络设备,因此不应该发生这种情况。
【问题讨论】:
这将取决于操作系统。虽然您没有指定操作系统,但它并不重要。为了保持可移植性,您应该始终预期您的数据报套接字会收到乱序数据。
【讨论】:
实际上,UDP 数据包的排序和接收并不能保证,即使它们是由 localhost 在 localhost 上发送的。只是因为协议的规范并不暗示它。
由于您无法对它们做出假设,因此您应该选择使用 TCP 或使用您的程序处理的序列号来处理重新排序。
【讨论】:
尽管您正在运行 localhost,但在实际部署中,预计 UDP 数据报会出现乱序。
如果您需要按顺序使用它们,请尝试 TCP。
【讨论】:
正如上面的海报所说的那样,没有指定 UDP 来保留序列,但是如果没有中间路由器,我也会怀疑您的代码中存在错误。
【讨论】: