从Java中读取UDP数据包中的位

时间:2016-03-19 03:32:37

标签: java sockets dns udp bits

我有以下代码来接收UDP数据包:

    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);

    }

我收到的数据报是使用dig命令和localhost进行DNS查询。 (挖掘@localhost -p 1234 test.com)我知道DNS查询格式如下所示:http://www.networksorcery.com/enp/protocol/dns.htm

我希望能够从数据报中读取各个位以查看不同的代码(如QR代码等)并读取查询。我理解这是如何在C中完成的,因为我可以在那里读取单个位,但我想在Java中这样做。我很难搞清楚如何有效地解析数据报,因为我收到一个字节数组,而packet.getData()将垃圾值打印到控制台。有没有人有任何建议?

1 个答案:

答案 0 :(得分:0)

您可以使用掩码检查字节中的位:

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