0

我正在实现一个基于 UDP 的 Stop-and-Wait ARQ。我正在尝试模拟错误概率。

在发送者和接收者中,我都有一个while()循环来继续发送和接收。一切正常,直到我在接收端引入错误概率。

我故意让接收方ACK即使收到数据包也不发送(以模拟ACK丢失的情况)。

令我惊讶的是,发送者和接收者都挂了!我知道这一点,因为为了调试,我printf()在发送者和接收者的while循环中都放了一个,并且没有打印任何内容。

为什么会发生这种情况?即使没有传输任何内容,while循环(独立于sendto()and recvfrom())也不应该停止。

4

1 回答 1

1

我认为问题在于您recvfrom在发送者和接收者中都有 while 循环。

recvfrom文档说:

如果套接字上没有可用的消息,则接收调用会等待消息到达,除非套接字是非阻塞的。

要使套接字非阻塞,请参阅有关 MSG_DONTWAIT 标志的文档。

所以,我猜当你让接收者没有发送你的确认消息时,发送者只是停止并等待 recvfrom 函数,而接收者在省略确认后第二次通过 while 循环挂在自己的 recvfrom 函数上消息(发送者和接收者都使用阻塞函数recvfrom,其中1个需要发送消息)。

于 2013-10-28T15:38:18.977 回答