UDP服务器停止接收数据
UDP Server stop receiving data
我正在尝试制作一个在线简单的游戏,当我在Localhost上测试游戏时,服务器和客户端没有问题,但是当我尝试将PC连接到笔记本电脑时通过本地网络,此开始接收数据,但停止后几秒钟。
这是我的代码:
服务器
客户端
您的问题可能是udp是不可靠,默认情况下的插座是 blocking 。。
所以请考虑这种情况:
- 服务器在
recvfrom
中被阻止,等待客户端的数据包 - 客户端发送一个数据包,该数据包已删除,但永远不会到达服务器
- 客户端继续使用它自己的
recvfrom
调用。
现在,您有一个僵局,因为服务器和客户端都在recvfrom
中被阻止。
对于像您这样的简单游戏,您可能不需要可靠性,因此,如果这里或那里的数据包未到达,则可以。但是重要的是您不会阻止那样的僵局。
基本上有两种解决方案:第一个是使插座非阻滞,并处理recvfrom
没有收到任何东西的情况。不过,请注意,因为您的线程没有任何睡觉,它们会消耗很多CPU功率。
第二个解决方案是使用例如select
查看何时可以从插座上阅读。
相关文章:
- 将相机数据从服务器实时流式传输到客户端
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- Arduino UNO+SIM800L-向服务器发送数据
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- Java 客户端C++服务器数据发送/接收问题
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据
- 为 Sql 服务器实现 odbc 包装器.将数据库数据读取为字符或要求驱动程序将数据转换为 C 类型
- 如何使用软化工具包从 OPC UA 服务器异步读取操作回调中的数据值响应中获取 NodeId 详细信息
- 如何在C++中使用带有SFML的http reqest从节点.js服务器获取数据?
- 在 MySQL 中运行 HTTP 服务器以从客户端接收数据
- 使用 Broadcast 发出的从节点服务器发送的数据不能被 C++ 套接字 IO 客户端读取
- 如何使用 asio 本地数据报构建回显服务器和客户端?
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 如何使用gRPC在客户端和服务器之间双向发送和接收流元数据
- 通过TCP将数据从C++客户端发送到JSON服务器
- 如何使客户端在将数据写入 C++ 管道之前检查服务器是否完成了从管道的读取操作
- C++中从客户端到服务器的数据传输问题
- Qt TCP服务器不从客户端读取数据
- 如何使用 C++ 中的 cpprestsdk 发布 json 数据并从本地服务器获取响应