2014-03-24 28 views
0

所以我現在有一個DatagramPacket從我的客戶端發送到服務器。 但是我想知道如何將數據分成多個值。我可以說我想發送兩個變量,x和y,然後我想在服務器端將它們作爲兩個變量接收。我將如何做到這一點?Java DatagramPacket,我該如何區分它?

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

另外,對於網絡遊戲來說,發送一個字符串作爲字節會有效嗎? 或者將每個單獨的項目轉換爲自己的字節並將其附加到字節數組會更好嗎?

回答

0

一個整數是4個字節長,所以讀取4個字節到第一個整數,讀入下一個4到下一個整數。這樣你就不需要使用字符串來發送整數。只需谷歌如何從byte轉換爲Integer

或者你應該使用像Netty一個網絡圖書館具有ByteBuf緩衝類已經提供了像readIntreadLong等方法,而當你在它,已經有書面Netty中game servers可能會幫助你。

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