【发布时间】:2021-09-26 11:46:19
【问题描述】:
希望你今天过得愉快。
我正在使用 UDP 将数据包从微控制器发送到我 PC 上的 python 服务器(我无法通过 TCP 获得所需的速度)。
如果数据包丢失,我想向微控制器发送重复请求(假设这是通过 UDP 进行纠错的最简单方法)?
我知道 UDP 使用校验和,如果这不正确,它将被接收器丢弃。 python socket中是否有标志或等效项,以便在丢弃数据包时,我可以要求微控制器再次发送数据包?
提前感谢您的宝贵时间, 会
【问题讨论】:
-
正如答案所述,UDP 是不可靠的协议(即它只是发送数据包而不关心是否接收到它们)。所以,如果你真的需要使用 UDP,你必须自己做这个机制(即如果数据包在你的 python 服务器中被丢弃,你应该从服务器发送一个预定义的 UDP 数据包到微控制器。在微控制器方面,当你接收到这个预定义的UDP数据包,让它重新发送最后一个数据包)。
-
另外一件事,您需要检查为什么校验和不正确,这在您的应用程序中是预期的吗?
-
@MohammedOsama 是的,这正是我需要做的!我的问题是如何检测到使用 python 套接字丢弃的数据包?
-
校验和不正确的原因只是由于传输时发生错误的罕见情况(1 到 0 或 0 到 1)。预计不会返回错误的校验和
-
我认为这是不可能的,因为失败的 UDP 校验和数据包在操作系统网络堆栈的低层被丢弃。无论如何,如果您可以禁用此功能,则 UDP 数据包中没有任何内容可以让对等方知道 哪个 数据包需要重新传输。例如,没有序列号。您要求 UDP 具有 TCP 的功能,但它不能。
标签: python sockets error-handling udp