UDP服务器停止接收数据

时间:2015-05-08 03:32:14

标签: c++ c networking udp server

我正在尝试制作在线简单游戏,当我在localhost上测试我的游戏时,服务器和客户端没有问题但是当我尝试通过本地网络将我的电脑连接到我的笔记本电脑时,这开始接收数据但是停止后几秒钟。

这是我的代码:

Server
Client

1 个答案:

答案 0 :(得分:3)

您的问题可能是UDP 不可靠,默认情况下套接字是阻止

所以想想这种情况:

  1. 服务器在recvfrom中被阻止,等待来自客户端的数据包
  2. 客户端发送一个丢弃但永远不会到达服务器的数据包
  3. 客户端继续进行自己的recvfrom来电阻止。
  4. 现在您遇到了死锁,因为recvfrom阻止了客户端服务器。

    对于像你这样的简单游戏,你可能不需要可靠性,所以如果这里或那里的数据包没有到达也没关系。但重要的是你不要阻止,因为可能会发生死锁情况。

    基本上有两种解决方案:第一种是使套接字不阻塞,并处理recvfrom没有收到任何内容的情况。这里要小心,因为你的线程没有休眠,它们将消耗相当多的CPU能力。

    第二种解决方案是使用例如轮询。 select以查看何时可以从套接字读取。

相关问题