0

我正在尝试用 Java 制作一个小型多人游戏。我得到了 tpc 连接工作,但现在我只能传输字符串。我想以数据包的形式传输更复杂的数据,其中包含同步游戏所需的所有数据。是否可以在一个 tcp 包中传输某种自定义结构或来自类实例的数据?或者有什么好方法(我用谷歌搜索,但找不到适合我需要的东西)?

4

4 回答 4

2

一般来说,这里要查找的关键字是serialization。这是将数据结构转换为可以通过套接字或其他传输介质发送的字节块的过程。

一种方法是使用Google Protocol Buffers库,该库具有与 Java 一起使用的绑定。

于 2012-08-31T05:17:36.247 回答
1

最基本但不是最佳的方法是使用Serializable -marker 接口,例如参见此处:Discover the secrets of the Java Serialization API

更好的方法是使用一些二进制协议,见这里的一些例子:通用二进制协议或自己做饭。

于 2012-08-31T05:18:04.443 回答
0

-如果您对穿过套接字的普通字符串不满意,则可以使用Serialization.

- Serialization必须在使用同一个 java 程序写入和读取数据时使用。

- 分别在存储和检索时Serialization 展平和膨胀对象。

-它实际上不是对象,但它Instance variables被用来保存并稍后用于在堆上复活一个相同的对象......

于 2012-08-31T05:24:05.770 回答
0

I would like to transmit more sophisticated data in packets, which would contain all the necessary data for synchronizing the game.

如果这些数据是Serializable(例如,您的数据仅由基元、字符串和基元数组或字符串数​​组组成),那么您可以使用Collection诸如VectorList等标准Map来保存您的数据。它们是可序列化的(检查它们的文档)。所以你只需要使用这个:

objectOutputStream.writeObject(data)

假设您正在使用ObjectOutputStream发送数据包。但是,如果您不需要创建自己的自定义数据结构,则需要用 标记它java.io.Serializable,正如其他人所指出的那样。

注意:在实现 Serializable 的类中,您必须确保该类的每个实例变量都是 Serializable 类型。

于 2012-08-31T05:59:48.517 回答