c - 带有 C UDP 套接字的选择性重复 ARQ
问题描述
我正在用 C 语言编写一个应用程序,该应用程序使用 WinSockets 将数据从发送方应用程序传输到接收方应用程序,并且我正在用选择性重复替换停止等待算法,现在我被卡住了。
我知道您需要发送一个数据包窗口,然后等待所有数据包的确认,并在某些数据包得到确认后继续发送更多数据包。接收方在收到正确的数据包后立即发送 ack 消息。
但是我看不到我应该如何在发送方接收确认。在发送数据包后立即使用 recvfrom 将有效地将其更改回停止等待。你对如何进行有什么建议吗?谢谢!
解决方案
您对数据包的滑动窗口有正确的想法。我建议您允许接收器确认多个数据包/序列号。
这样,发送方可以在传输过程中保留几个具有有限最大值的数据包。发送方不必停止并等待每个发送的数据包,但可以在等待之前继续发送最大数量的数据包。
如果在发送方达到最大值之前接收方 ACK,则不会等待 :)
编辑:
这家伙有一些不错的想法和代码: http: //gafferongames.com/tags/networking
推荐阅读
- regex - REGEX 在引号之间但在指定字符串之后提取字符串
- javascript - 解析错误:保留关键字'yield'
- php - 初学者:cakephp 3.6 安装 cakedc/users
- google-maps - 如何删除 Google 地图上的两个版权声明之一?
- html - 如何创建一个表格,第一列的宽度设置为适合内容,其余的在整个容器宽度上等间距?
- python - Paramiko 关闭连接不起作用
- git - 如何将所有分支推送到新创建的存储库?
- r - S4 方法在另一个包中也设置时失败
- c# - 当列表视图是“instagram 设计的”时,如何通过单击获得整个班级?
- vba - 想不通为什么会有错误