gpt4 book ai didi

c++ - UDP 服务器停止接收数据

转载 作者:太空宇宙 更新时间:2023-11-04 07:08:45 24 4
gpt4 key购买 nike

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

这是我的代码:

Server
Client

最佳答案

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

那么想想这种情况:

  1. 服务器阻塞在 recvfrom 等待来自客户端的数据包
  2. 客户端发送一个数据包,该数据包被丢弃并且永远不会到达服务器
  3. 客户端继续进行它自己的 recvfrom 调用,该调用会阻塞。

现在您遇到了死锁,因为服务器 客户端都在 recvfrom 中被阻止。

对于像您这样的简单游戏,您可能不需要可靠性,因此即使这里或那里的数据包没有到达也没关系。但重要的是您不要阻塞,否则可能会出现死锁情况。

基本上有两个解决方案:第一个是使套接字成为非阻塞的,并处理 recvfrom 没有收到任何东西的情况。不过请注意,由于您的线程不进行任何 sleep ,因此它们会消耗相当多的 CPU 功率。

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

关于c++ - UDP 服务器停止接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30115304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com