2013-04-28 2 views
0

мне нужно послать UDP пакета в следующем формате:Java, UDP-формат данные

[1 октет] [2 ОКТЕТА] [3 ОКТЕТА] [4 ОКТЕТА] [5 КОРОТКИЕ]

Например:

77.125.65.201:27015

Hexadecimal:

4D 7D 41 C9 69 87

Это то, что я захватил с Wireshark:

enter image description here

Почему 2 экстра OCTET [00, 00]?

И это, как я формат:

byte[] responseHeader = { (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, (byte)0xFF, 0x66, (byte)0x0A }; 
byte[] testIP = getByteIp("77.125.65.201:27015"); 
byte[] response = new byte[responseHeader.length + testIP.length]; 
System.arraycopy(responseHeader, 0, response, 0, responseHeader.length); 
System.arraycopy(testIP, 0, response, responseHeader.length, testIP.length); 

private byte[] getByteIp(String fullData){ 
    String[] data = fullData.split(":"); 
    byte[] returnArray = new byte[8]; 

    byte[] ip = new byte[4]; 
    try { 
     ip = InetAddress.getByName(data[0]).getAddress(); 
    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    byte[] port = new byte[2]; 
    port = ByteBuffer.allocate(4).putInt(Integer.parseInt(data[1])).array(); 

    System.arraycopy(ip, 0, returnArray, 0, ip.length); 
    System.arraycopy(port, 0, returnArray, ip.length, port.length); 

    return returnArray; 
} 

ответ

0

Проблема заключается в том, что номер порта имеет значение 2 байта, но вы лечите по стоимости в 4 байта. Если вы посмотрите внимательно, вы увидите, что у вас есть 8 байт вместо 6, и после этих нулей появляются два «значительных» байта.

В любом случае, следующий код должен делать то, что вы пытаетесь сделать.

byte[] port = ByteBuffer.allocate(2).putShort(
     (short) Integer.parseInt(data[1])).array(); 
Смежные вопросы