Realiable UDP - TCP 握手何时发生?

如何解决Realiable UDP - TCP 握手何时发生?

尝试为连接到 Java 服务器的我的游戏(在 GameMaker: Studio 中制作)开发可靠的 UDP 协议。我需要确保数据包到达并且它们以正确的顺序到达。

我正在尝试模拟 TCP 协议来执行此操作,但让我感到困惑的一件事是 3 次握手:何时发生?

握手基本上是在您第一次连接到某物时吗?只做过一次吗? (直到连接断开)

如果是这样,那么我将哪些数据附加到常规数据包中?

假设我有最初的 3 个连接数据包:SYN -> SYN-ACK -> ACK

让我们假设这一切都进行得很顺利,我们已经连接上了。

然后假设我想向服务器发送一条消息:“你好”。我基本上是在为这条消息做 SYN -> SYN-ACK -> ACK 吗?我到底在这个消息包/数据报上附加了什么来确保它按顺序到达和到达?

解决方法

然后假设我想向服务器发送一条消息:“你好”。我基本上是在为这条消息做 SYN -> SYN-ACK -> ACK 吗?

没有。数据包的传输没有保证。

我到底在这个消息包/数据报上附加了什么来确保它按顺序到达和到达?

您可以在数据包中添加一个序列号并以编程方式对其重新排序:如果您收到数据包 1、2、3 和 5,则必须等待数据包 4。

我需要确保数据包到达并且它们以正确的顺序到达。

如果您需要重传和有序到达(并且可能避免重复),则很难以编程方式对 TCP 做更好的事情!

,

根据我的经验,我使用 UDP 发送广播数据包(只是数据包 ID 以了解我正在接收的内容)来获取当前网络中创建的每个服务器。想象一个名为“A”的客户端在网络中寻找可能的匹配项。等待玩家的其他客户端正在以广播方式发送 UDP 数据报,以便该网络中的每个人都知道他们。客户端“A”连接到匹配后,主机通过TCP与“A”链接,以获得稳定连接。要获取数据包的顺序,发送一个初始 id 数字,这样当客户端收到数据包时就知道他收到了什么(例如 id=1 --> ping,id=2 --> player_position,id=3 --> hp_update )。您应该以编程方式获取数据包的顺序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?