【发布时间】:2021-04-14 03:22:39
【问题描述】:
尝试为我的游戏(在 GameMaker: Studio 中制作)开发一个可靠的 UDP 协议,以连接到 Java 服务器。我需要确保数据包到达并且它们以正确的顺序到达。
我正在尝试模拟 TCP 协议来执行此操作,而让我感到困惑的一件事是 3 次握手:什么时候发生?
第一次连接到某个东西时基本上是握手吗?只做过一次吗? (直到连接断开)
如果是这样,那么我将哪些数据附加到常规数据包中?
假设我有最初的 3 个连接数据包:SYN -> SYN-ACK -> ACK
假设这一切进展顺利,我们已经连接好了。
然后假设我想向服务器发送一条消息:“你好”。我基本上是在为这条消息做SYN -> SYN-ACK -> ACK 吗?我究竟在这个消息包/数据报上附加了什么来确保它按顺序到达?
【问题讨论】:
-
你为什么要复制 TCP?
-
我将 GameMaker 用于 P2P 客户端,将 Java 用于匹配服务器。 GameMaker 在两个 GameMaker 客户端之间具有内置的可靠 UDP 协议。但 GameMaker->Java 没有。匹配服务器帮助我连接玩家并允许他们之间的 UDP 打孔。 GameMaker 显然无法获取您打开的 UDP 端口,因此我需要使用 UDP 连接到 Matchmaking 服务器以获取该端口,服务器将依次将我的端口发送给正确的玩家,我们通过发送连接多个数据报对端口进行打孔,因此不需要端口转发。
-
@NomadMaker 因为他需要 TCP 提供的所有功能,但不能使用 TCP,因为它是 NAT 后面的两台机器之间的直接连接。
-
@DavidSchwartz 也许我遗漏了什么,但我已经在 nat 路由器后面的此类网络上建立了 TCP 连接。
-
@NomadMaker NAT 通常只允许出站 TCP 连接。不能从两边出站。
标签: java tcp udp game-maker-studio-2 reliable-message-delivery