使用 SFML C++库在 UDP 网络中进行多套接字"握手"

Multiple socket 'handshaking' in UDP network using SFML C++ libraries

本文关键字:套接字 握手 C++ SFML 库在 UDP 网络 使用      更新时间:2023-10-16

我正在使用SFML库使用UDP协议编码一个实时的网络程序。服务器将处理所有处理,将数据包发送给客户端,反之亦然。

我需要一种方法来同步屏幕更新,因为网络两侧都会有一个实时用户界面。我的想法是,我将让客户端和服务器打开两个端口,1用于发送数据包,另一个作为"验证"端口。

进行更新并进行了验证后,两个循环都会通过网络发送一个字节,表明它们的侧面已"准备就绪"。一旦"准备就绪"侧收到字节,它将知道屏幕准备好在双方上进行更新,然后渲染更新。

我的问题是,我该如何使用SFML库在C 中执行此操作。是正确的,我会遇到网络错误等。

注释是否需要清理。

您应该阅读有关该主题的真正起作用方式,例如如何实时策略游戏(如星际争霸和帝国时代)看起来如何?

,由于理论适用于每种编程语言(使用插座),因此没有什么具体的。而且您尚未提供您正在努力的代码,所以没有最小,完整和可验证的示例。

,但我要说的一件事是不要在网络上等待渲染。这将是卑鄙的地狱,如果您想要"实时",则必须在没有真正的"实时"的情况下对其进行模拟,因为网络总是会有延迟。

,如果您选择了UDP,则别无选择,只能打开2个端口,一个在服务器上,一个在客户端上。但是我会反对使用"确认" 端口,因为这是没有用的,因为无论如何您都会多次发送。

请参阅如何使用SFML使用插座。我想您已经知道这一点,但这对来自Google的人可能很有用。

请参阅SFML网络RTS,它比我更好地解释了该怎么做。

来自@muhwu

通常,如果您要进行定时关键元素的实时游戏,则应将命令播放器稍微限制在未来以弥补延迟。最多可以是几百毫秒。

来自 @sean-middleditch:

还请注意,许多文章确实过时了。例如,TCP是在RTS等游戏中进行网络的绝佳选择,尤其是使用锁定网络,甚至是许多较小的MMO的选择协议。尽管如此,网络上几乎每篇文章都涉及构建自定义UDP协议。

说到gamedev.stackexchange.com,您可能需要阅读问题和答案,如果这无济于事,请问一个问题。


提出相同的问题,因此可能不是一个路要走,因为您的问题太广泛并且已经回答了多次(例如我链接的第一个)。