sto cercando di leggere una serie di informazioni che mi arrivano in broadcasting sulla porta 1002 in udp ma avendo letto e creato un piccolo programma che legge il traffico UDP ho scoperto una cosa che non mi so spiegare.

codice mio programma

codice:
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPReceive {
  public static void main(String args[]) {
    try {
      int port = 1002;
      DatagramSocket socket = new DatagramSocket(port);
      //InetAddress server = InetAddress.getByName("10.0.0.251");
      byte[] buffer = new byte[4096];
      DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
      while (true) {
        socket.receive(packet);
        String msg = new String(buffer, 0, packet.getLength());
        System.out.println(packet.getAddress().getHostName());
        //System.out.println(" ");
        //System.out.println(msg);
        System.out.println(" ");
		System.out.println(stringToHex(msg));
	    stringHex(buffer,packet.getLength());
        packet.setLength(buffer.length); 
      }
    } catch (Exception e) {
      System.err.println(e);
    }
  }
public static String stringToHex(String base)
    {
     StringBuffer buffer = new StringBuffer();
     int intValue;
     for(int x = 0; x < base.length(); x++)
         {
         int cursor = 0;
         intValue = base.charAt(x);
         String binaryChar = new String(Integer.toBinaryString(base.charAt(x)));
         for(int i = 0; i < binaryChar.length(); i++)
             {
             if(binaryChar.charAt(i) == '1')
                 {
                 cursor += 1;
             }
         }
         if((cursor % 2) > 0)
             {
             intValue += 128;
         }
            if (intValue > 15) {
                buffer.append(Integer.toHexString(intValue)+".");
            } else {
                buffer.append("0"+Integer.toHexString(intValue)+".");
            }
     }
     return buffer.toString();
}
    public static Void stringHex(byte[] base, int leng) {
        StringBuffer buffer = new StringBuffer();
        for (int x = 0; x < leng; x++) {
            buffer.append(base[x] + ".");
        }  
        System.out.println(buffer.toString());
        return null;
       } 

}
la lettura che mi rende questo programmino in alcuni punti risulta errata:
00.0c.c6.f6.a9.d8.00.00.1d3.82.00.00.30.39.3a.35.3 6.3a.b2.39.00.00.
ma invece da uno sniffer vedo i dati reali:
00.0c.c6.76.29.58.08.00.45.00.02.54.bf.9f.00.b9.40 .11.a2.47.0a.00.00.fb.0a.00
ora non mi so spiegare perché vedo informazioni a oltre 8 bit es ( 1d3 ) che poi mi degradano tutto il parchetto.

quale potrebbe essere il problema ?