2011-09-28 2 views
0

처음으로 볼 수있는 문제가 있습니다. 응용 프로그램에서 데이터를 보내고 받기 위해 Java DatagramSocket (s)을 사용하고 있습니다.DatagramPacket에 의해 수신 된 추가 바이트

이 내가 데이터를 전송하는 방법이다 : 나는 BYT [] 버퍼를 보낼 때 지금

byte[] buffer = "my data".getBytes(); 
senderPacket = new DatagramPacket(buffer, 0, buffer.length, remoteAddress, remotePort); 
socket.send(senderPacket); 

를, 그것은 크기가 275 했다입니다하지만 수신 응용 프로그램에서 패킷을 수신 바이트 [을 받았을 때 ]와 같이 receiverPacket에서 다음과 같이 입력합니다.

buffer = new byte[2048]; 
receiverPacket = new DatagramPacket(buffer, buffer.length); 
socket.receive(receiverPacket); 

수신 된 바이트 수가 278 바이트인데 3 바이트가 더 많은 것으로 나타났습니다.

이것은 큰 문제가 아닌 것처럼 보일지 모르지만, 실제로 이것이 나에게 도움이 될 것입니다. 왜 이런 일이 일어나고 있는지, 어떻게 해결할 지, 논리적 인 설명이 도움이 될 것입니다.

감사합니다.

+0

tcpdump와 같은 도구를 실행하여 전선을 가로 지르는 현상을 정확히 볼 수 있습니까? 이러한 여분의 바이트가 송신 측 또는 수신 측에서 나타나는지 여부를 아는 것이 유용합니다. –

+0

패킷의 길이를 결정하는 코드가 여기에 표시되지 않습니다. – EJP

답변

0

3 개의 추가 바이트는 길이 마커 일 수 있습니다. C/C++에서 소켓을 만들 때 처음에는 보통 메시지의 길이를 보내는 데 4 바이트를 사용하고 그 데이터를 사용하여 전체 메시지를 읽는 데 얼마나 많은 양을 읽어야 하는지를 결정합니다.

+1

마술처럼 마커를 추가해서는 안됩니다. 길이가 2 바이트로 행복하게 인코딩 될 수 있도록 UDP 패킷이 65536 바이트로 제한되므로 어떤 경우에도 3 바이트는 길이 마커의 이상한 크기입니다. –

관련 문제