试图为我的游戏(在Gamemaker:Studio制造)开发可靠的UDP协议,该协议连接到Java服务器。我需要确保数据包到达,并以正确的顺序到达。 我正在尝试将TCP协议模拟建模,而让我感到困惑的一件事是三向握手:
什么时候发生?基本上是当您连接到某些东西时握手?只有一次吗? (直到连接掉落) 如果是这样,那么我将哪些数据附加到常规数据包?
,我有我的最初3个数据包用于连接:SYN -> SYN-ACK -> ACK
lelet假设这一切都顺利进行,我们已经连接了繁荣。
然后说我想向服务器发送一条消息:“你好”。我基本上是为此消息做SYN -> SYN-ACK -> ACK
吗?我到此消息数据包/数据报到底是什么,以确保其到达并到达秩序?
然后说我想向服务器发送一条消息:“你好”。我基本上是在做syn吗?
没有。该数据包没有保修。
您可以在数据包中添加一个顺序编号,并以编程方式对其进行重新排序:如果您接收到数据包1,2,3,而超过5个必须等待数据包4。
我需要确保数据包到达并以正确的顺序到达。
如果您需要重新传输和有序到达(并且可能避免重复),那么从编程方面做一些比TCP更好的事情是非常困难的!在我的经验中,我使用UDP发送了广播数据包(只有数据包ID来了解我收到的内容),以使当前网络中创建每个服务器。想象1个客户称为“ A”,寻找网络中可能的匹配项。等待玩家的其他客户正在广播中发送UDP数据报,以便该网络中的每个人都知道。客户端“ A”连接到比赛后,主机将通过TCP链接到“ A”,以获得稳定的连接。要获取数据包的订单,请发送一个初始ID数字,因此,当客户端接收到数据包时(例如,ID = 1-> ping,ID = 2-> player_position,id = 3->> HP_UPDATE)。您应该以编程方式采取行动以获取数据包的订单。