首页 > 解决方案 > 带有 C UDP 套接字的选择性重复 ARQ

问题描述

我正在用 C 语言编写一个应用程序,该应用程序使用 WinSockets 将数据从发送方应用程序传输到接收方应用程序,并且我正在用选择性重复替换停止等待算法,现在我被卡住了。

我知道您需要发送一个数据包窗口,然后等待所有数据包的确认,并在某些数据包得到确认后继续发送更多数据包。接收方在收到正确的数据包后立即发送 ack 消息。

但是我看不到我应该如何在发送方接收确认。在发送数据包后立即使用 recvfrom 将有效地将其更改回停止等待。你对如何进行有什么建议吗?谢谢!

标签: cwinsockrepeat

解决方案


您对数据包的滑动窗口有正确的想法。我建议您允许接收器确认多个数据包/序列号。

这样,发送方可以在传输过程中保留几个具有有限最大值的数据包。发送方不必停止并等待每个发送的数据包,但可以在等待之前继续发送最大数量的数据包。

如果在发送方达到最大值之前接收方 ACK,则不会等待 :)

编辑:

这家伙有一些不错的想法和代码: http: //gafferongames.com/tags/networking


推荐阅读