我正在尝试制作在线简单游戏,当我在localhost上测试我的游戏时,服务器和客户端没有问题但是当我尝试通过本地网络将我的电脑连接到我的笔记本电脑时,这开始接收数据但是停止后几秒钟。
这是我的代码:
答案 0 :(得分:3)
您的问题可能是UDP 不可靠,默认情况下套接字是阻止。
所以想想这种情况:
recvfrom
中被阻止,等待来自客户端的数据包recvfrom
来电阻止。现在您遇到了死锁,因为recvfrom
阻止了客户端和服务器。
对于像你这样的简单游戏,你可能不需要可靠性,所以如果这里或那里的数据包没有到达也没关系。但重要的是你不要阻止,因为可能会发生死锁情况。
基本上有两种解决方案:第一种是使套接字不阻塞,并处理recvfrom
没有收到任何内容的情况。这里要小心,因为你的线程没有休眠,它们将消耗相当多的CPU能力。
第二种解决方案是使用例如轮询。 select
以查看何时可以从套接字读取。