2014-03-24 2 views
0

그래서 현재 클라이언트에서 서버로 보내지는 DatagramPacket이 있습니다. 그러나 데이터를 여러 값으로 분리하는 방법을 알고 싶습니다.Java 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(); 

또한 네트워킹 게임의 경우 문자열을 바이트로 보내는 것이 효율적입니까? 또는 각 개별 항목을 자신의 바이트로 변환하고 바이트 배열에 추가하는 것이 더 낫습니까?

답변

0

정수는 4 바이트이므로 4 바이트를 첫 번째 정수로 읽고 다음 4를 다음 정수로 읽습니다. 이런 식으로 문자열을 사용하여 정수를 보낼 필요가 없습니다. byteInteger으로 변환하는 방법에 관한 Google 검색을위한

은 또한 당신은 이미 등 readInt, readLong 같은 방법을 제공하는 ByteBuf 버퍼 클래스가 Netty 같은 네트워킹 라이브러리를 사용하는 그리고 당신이 그것에있는 동안, 당신을 도울 수있는 이미 인 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(); 
관련 문제