2016-03-19 3 views
1

У меня есть следующий код, чтобы принимать пакеты UDP:Чтения бит из пакета UDP в Java

DatagramSocket socket = new DatagramSocket(Integer.parseInt(port)); 
    byte[] buffer = new byte[2048]; 
    DatagramPacket packet = new DatagramPacket(buffer,buffer.length); 

    while(true) 
    { 
     socket.receive(packet); 

     byte[] data = packet.getData(); 

     packet.setLength(buffer.length); 

    } 

Датаграммы Я получаю от использования команды копания с локальным хостом, чтобы сделать запрос DNS. (dig @localhost -p 1234 test.com) Я знаю, что формат запросов DNS выглядит так, как показано на этом сайте: http://www.networksorcery.com/enp/protocol/dns.htm

Я хочу, чтобы иметь возможность читать отдельные биты из дейтаграммы, чтобы увидеть разные коды (например QR-код и т. д.) и читать запросы. Я понимаю, как это делается в C, так как я могу читать отдельные биты там, но я хотел бы сделать это на Java. Мне трудно понять, как эффективно анализировать дейтаграмму, поскольку я получаю массив байтов, а package.getData() выводит значения мусора в консоль. У кого-нибудь есть совет?

+0

Странный код. Вы понимаете, что 'buffer == data'? И что вы shoild сбрасываете длину * до * каждый получает? – EJP

ответ

0

Вы можете проверить биты в байте с использованием маски:

int bit0 = b & 0x01; 
    int bit1 = b & 0x02; 
    int bit2 = b & 0x04; 
    ... 
    int bit7 = b & 0x80;