Java DatagramPacket,我该如何分开呢?

时间:2014-03-24 16:58:56

标签: java datagram

所以我现在有一个DatagramPacket,它从我的客户端发送到服务器。 但是,我想知道如何将数据分成多个值。

I.E,假设我想发送两个变量x和y,然后我想在服务器端接收它们作为两个变量。我该怎么做?

int x = 5;
int y = 10;

//Send data to server using a pipe | as a delimiter
byte[] data = Integer.toString(x) + "|" + Integer.toString(y).getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, host, port);

...

//Receive data from client
packet = new DatagramPacket(new byte[PACKETSIZE], PACKETSIZE);

//Receive a packet (blocking)
socket.receive(packet);

int x = packetSeparate(packet, "an integer");
int y = packetSeparate(packet, "an integer");

换句话说,在我从客户端发送字符串作为字节数组后,在服务器端,我怎么能说: “整数x是字节数组中的第一个整数,称为:packet.getData()”。

int x = packet.getData().getAnInteger();
int y = packet.getData().getAnInteger();

另外,对于网络游戏来说,将字符串作为字节发送会有效吗? 或者将每个单独的项目转换为自己的字节并将其附加到字节数组会更好吗?

2 个答案:

答案 0 :(得分:0)

一个整数是4个字节长,所以将4个字节读入第一个整​​数,然后将4个读取到下一个整数。这样你就不需要使用字符串来发送整数。只需谷歌了解如何从byte转换为Integer

或者你应该使用像Netty这样的网络库,它有一个ByteBuf缓冲类,它已经提供了readIntreadLong等方法。当你在它的时候,已经在Netty中编写game servers可能会帮助你。

答案 1 :(得分:0)

使用DataInputStream

packet = new DatagramPacket(new byte[PACKETSIZE], PACKETSIZE);

//Receive a packet (blocking)
socket.receive(packet);

DataInputStream din = new DataInputStream(new ByteArrayInputStream(packet.getData(), packet.getOffset(), packet.getLength());

int x = din.readInt();
int y = din.readInt();