【发布时间】:2018-01-08 11:26:41
【问题描述】:
我有一个 UDP 连接,它将一个回显服务器与一个测试客户端连接起来。测试客户端连续发送数据包并等待大约一秒钟以接收它们。 如果它无法获取数据包,则假定数据包丢失并发送另一个数据包。 大多数数据包已成功发送和接收,但其中一些假设丢失的数据包将在发送下一个数据包后在客户端接收。实际上他们收到延迟。 我的发送和接收功能在不同的线程上运行。 我能做些什么来消除这些延迟的数据包? (我的程序在我的本地主机上运行——所以丢包是不合理的)
【问题讨论】:
-
只选择一种语言,UDP 是 UDP,如果您需要更多功能,请寻找另一种协议,如 TCP。
-
序列号。如果您收到的回复包的序列号低于您发送的最后一个,则忽略它。
-
如果您正在处理 UDP,您应该为数据包丢失、重新排序和重复做好准备。 “我的发送和接收功能在不同的线程上运行”这句话让我认为这实际上是您的应用程序中的多线程问题,而不是数据包丢失(这确实不太可能在 localhost 上发生)。
-
似乎序列号较低的数据包到达得更快,@Someprogrammerdude
-
你这是什么意思?假设您发送数据包 #1 并得到回复。然后您发送数据包 #2,但回复延迟。因此,您继续发送数据包#3,但在收到它的回复之前,您会收到#2 的回复。然后忽略#2,继续等待#3。等等。如果您在发送 #3 之前收到 #2,那么一切都很好。