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