1

我为使用套接字的 2D 自上而下 RPG 游戏编写了一个客户端-服务器对。但是,我不清楚如何准确地传输用户想要做的事情。

我会简单地传输一个像“向北移动”这样的字符串,然后使用 switch 语句来决定要采取什么行动,还是有更优雅的解决方案?

4

3 回答 3

2

如果客户端和服务器都是 java 程序,那么我将使用命令模式,其中每个命令类都执行特定的工作(如您的情况下的“向北移动”),并且命令对象在客户端和服务器之间交换。

我们曾经在我们的企业应用程序(虽然不是游戏)中使用这种方法,同时实现多主机复制,并且它非常可扩展,无需任何 if/else 链或 switch 语句,只需接收命令并调用 command.execute() 无需担心命令是什么。

于 2012-09-08T18:39:49.947 回答
0

是的,基本上。你可以传输任何你想要的字符串、整数。您基本上将命令写入可以从客户端的网络套接字获取的 OutputStream,然后在服务器端的 InputStream 上读取它们。

您可以将来自Socket的 Input/OutputStream 对象与其他流类型(例如ObjectOutputStream / ObjectInputStream )包装在一起,这样您就可以直接将完整对象和原始类型读/写到流中,就像读/写数据一样使用这些相同的流类型到文件系统上的文件。

对网络的读/写实际上与从任何其他地方读/写没有什么不同,除了在网络中您必须首先通过套接字建立连接。一旦你有了那个套接字和正确的流类型设置,你就可以像在应用程序中的其他任何地方一样读/写数据。

于 2012-09-08T18:40:53.937 回答
0

我认为您应该选择一个序列化库来执行此操作,而不是从流中进行原始解析。

我建议使用 Protocol Buffers 或 FlatBuffers。

只需传输字节数组,它们就会为您解析为对象。

于 2015-11-06T03:43:35.667 回答