2

通过提出这个问题,我想实现的是学习如何向另一台计算机发送和接收二维数组。

上下文是2-D 数组是我的游戏的地图,当我开始游戏时,我希望选择成为服务器或客户端(如果是客户端,请指定服务器IP),然后服务器将发送客户端(其中一个是另一个人,具有不同的IP)连接时的 2D 阵列。

我希望这一切都有意义,我之前已经给出了这个但我无法让它工作,我尝试过Datagram Packets,但我无法弄清楚如何分段发送所有二维数组,然后将其转回成二维数组。

我需要使用什么类型的 Stream 或一般网络对象?它能够发送二维数组吗?你能举个例子来帮助我设置它吗?

还要注意的是,我之后会发送玩家坐标和地图更改,所以如果 Networking 对象也可以使用它,那将是一个加号。

4

2 回答 2

2

如果对象类型是 instanceof Serializable,这将适用于任何原始类型数组和对象数组

服务器

    ServerSocket ss = new ServerSocket(port);
    Socket s = ss.accept();
    ObjectInputStream is = new ObjectInputStream(s.getInputStream());
    byte[][] array = (byte[][])is.readObject();

客户

    byte[][] array = new byte[10][10];
    Socket s = new Socket("host", port);
    ObjectOutputStream os = new ObjectOutputStream(s.getOutputStream());
    os.writeObject(array);
于 2012-12-27T13:51:49.500 回答
0

您应该从中创建一个对象。以后处理起来更方便。
之后序列化它,然后将其拆分为更小的字节 [](如果它大于 64 kb)。您为每个数据包添加一些字节,我更喜欢
byte[0] = 被拆分?
byte[1] + byte[2] = sendNumber (仅用于控制,每个发送对象后它都会增加)
byte[3] = 你的对象有多少部分
byte[4] = 它是
什么你还需要什么。
之后,您可以轻松地将零件组合在一起。
我从未使用过它,但我还发现了一个名为 kryonet 的库(在谷歌搜索时)。
看看......正确谷歌它。

于 2012-12-27T12:57:36.937 回答