【问题标题】:UDP Server stop receiving dataUDP Server 停止接收数据
【发布时间】:2015-07-18 20:47:38
【问题描述】:

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

这是我的代码:

Server
Client

【问题讨论】:

标签: c++ c networking udp server


【解决方案1】:

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

所以想想这种情况:

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

现在你有一个死锁,因为服务器客户端都被recvfrom阻塞了。

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

基本上有两种解决方案:第一种是使套接字非阻塞,并处理recvfrom 没有收到任何东西的情况。不过请注意,因为您的线程不会进行任何睡眠,它们会消耗大量 CPU 资源。

第二种解决方案是使用轮询,例如select 看看你什么时候可以从套接字读取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2020-11-11
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多