【发布时间】:2013-10-22 03:38:22
【问题描述】:
我正在尝试在 C 中实现Stop-and-Wait UDP 客户端-服务器套接字程序。众所周知,Stop-and-Wait 流控制基本上有三种可能的场景。即,发送数据包后,
- 发送方收到正确的
ACK,从而开始发送下一个数据包; - 发送方收到了错误的
ACK,因此重新发送了这个数据包; - 发件人在
TIMEOUT内没有收到ACK,因此重新传输此数据包。
我的想法是通过发送方返回值recvfrom()来区分这三种场景。
- 对于场景 1&2:
recvfrom()只返回接收到的ACK的长度。由于在我的实现中不正确的ACK与正确的长度相同,所以我必须更深入地检查ACK的内容。没什么大不了的。我知道该怎么做。 - 当我试图识别没有收到
ACK的场景3 时,问题就来了。让我困惑的是我的recvfrom()在一个while 循环中,所以recvfrom()会被不断地调用。 当接收方实际上并未发送发送方ACK时,它会返回什么?是 0 还是 1?
【问题讨论】: