使用 SFML C++库在 UDP 网络中进行多套接字"握手"
Multiple socket 'handshaking' in UDP network using SFML C++ libraries
我正在使用SFML库使用UDP协议编码一个实时的网络程序。服务器将处理所有处理,将数据包发送给客户端,反之亦然。
我需要一种方法来同步屏幕更新,因为网络两侧都会有一个实时用户界面。我的想法是,我将让客户端和服务器打开两个端口,1用于发送数据包,另一个作为"验证"端口。
进行更新并进行了验证后,两个循环都会通过网络发送一个字节,表明它们的侧面已"准备就绪"。一旦"准备就绪"侧收到字节,它将知道屏幕准备好在双方上进行更新,然后渲染更新。
我的问题是,我该如何使用SFML库在C 中执行此操作。是正确的,我会遇到网络错误等。
注释是否需要清理。
您应该阅读有关该主题的真正起作用方式,例如如何实时策略游戏(如星际争霸和帝国时代)看起来如何?
,由于理论适用于每种编程语言(使用插座),因此没有什么具体的。而且您尚未提供您正在努力的代码,所以没有最小,完整和可验证的示例。
,但我要说的一件事是不要在网络上等待渲染。这将是卑鄙的地狱,如果您想要"实时",则必须在没有真正的"实时"的情况下对其进行模拟,因为网络总是会有延迟。
,如果您选择了UDP,则别无选择,只能打开2个端口,一个在服务器上,一个在客户端上。但是我会反对使用"确认" 端口,因为这是没有用的,因为无论如何您都会多次发送。
请参阅如何使用SFML使用插座。我想您已经知道这一点,但这对来自Google的人可能很有用。
请参阅SFML网络RTS,它比我更好地解释了该怎么做。
来自@muhwu
通常,如果您要进行定时关键元素的实时游戏,则应将命令播放器稍微限制在未来以弥补延迟。最多可以是几百毫秒。
来自 @sean-middleditch:
还请注意,许多文章确实过时了。例如,TCP是在RTS等游戏中进行网络的绝佳选择,尤其是使用锁定网络,甚至是许多较小的MMO的选择协议。尽管如此,网络上几乎每篇文章都涉及构建自定义UDP协议。
说到gamedev.stackexchange.com,您可能需要阅读问题和答案,如果这无济于事,请问一个问题。
提出相同的问题,因此可能不是一个路要走,因为您的问题太广泛并且已经回答了多次(例如我链接的第一个)。
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- C++套接字客户端到 Python 服务器未创建连接
- 在不知道套接字的情况下关闭网络连接
- C++套接字对不读/写父/子
- 非更新套接字消息
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- 当客户端在 write() 期间终止连接时,由对等套接字错误重置连接
- 使用 SFML C++库在 UDP 网络中进行多套接字"握手"