2012-12-27 46 views
1

我想通过问这个问题来实现如何发送和接收二维数组到另一台计算机。发送和接收二维数组java

的背景是,2-d阵列的地图是针对我的比赛,当我开始我的比赛,我想一个选项是服务器或客户端(如客户端,指定服务器IP ),然后服务器在它们连接时发送客户端(其中一个将是另一个人,具有不同的IP)二维数组。我希望这一切都有道理,我给了这个前,但我不能得到它的工作,我已经尝试数据包包,但我想不出如何发送所有的二维数组的段,然后将其重新转换为二维数组。

需要使用什么类型的Stream或一般网络对象?并且它能够发送2D阵列吗? 你能举一个例子来帮我设置吗?另外值得注意的是,之后我会发送玩家坐标和地图更改,所以如果网络对象也适用于此,那么这是一个优点。

+5

二维的阵列什么? Google用于“Java序列化”。 –

+1

[协议缓冲区](https://developers.google.com/protocol-buffers/docs/overview)将是一个很好的结构传递... – t0mm13b

+0

@ricintech ...很好...你很好地编辑它。 – amod

回答

0

您应该从中创建一个对象。事后处理更容易。
之后,你序列化它,然后你把它分成较小的字节[](如果它大于64 kb)。 您为每个数据包添加了一些字节,我更喜欢
byte [0] =被分割?
字节[1] +字节[2] = sendNumber(只是用于控制,它的每一个发送对象之后增加)
字节[3] =你的对象多少份具有
字节[4] =什么部分是它
你还需要什么。
之后,您可以轻松地将零件放在一起。
我从来没有使用它,但我也发现一个图书馆知道kryonet(同时谷歌搜索)。
看一看... google正确。

2

这将任何原始类型的阵列和对象阵列的工作,如果对象类型是可序列化的instanceof

服务器

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);