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

标签 c++ c networking udp server

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

这是我的代码:

Server
Client

最佳答案

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

那么想想这种情况:

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

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

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

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

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

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

相关文章:

c++ - FLTK显示图像

c - 如何为CUDA优化Conway的人生游戏?

iphone - 应用程序在 UITextView 滚动后崩溃

http - VLC 客户端如何在应用层 (HTTP) 中向服务器请求更多数据?

C++ 对象作为接口(interface)方法的参数

c++ - 使用模板的缺点是什么?

c - C 中的文件处理和函数

c - Epoll tcp 服务器在接受连接时停止运行

mysql - Docker - 对另一个应用程序使用相同的网络和数据库?

c++ - Qt::Popup 破坏 QScroller 动态滚动?