用python解码二进制协议

用python解码二进制协议,python,protocols,binary-data,software-defined-radio,binary-deserialization,Python,Protocols,Binary Data,Software Defined Radio,Binary Deserialization,我正在尝试编写一个简单的python客户机来解码由一个名为的程序生成的二进制流 协议如下所示(为方便起见,复制如下)。我的理解是,前42个字节应该包含我认为用python模块读取/解码的元帧 我从一件非常简单的事情开始 import select, socket from struct import * port = 19090 bufferSize = 512 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(('loc

我正在尝试编写一个简单的python客户机来解码由一个名为的程序生成的二进制流

协议如下所示(为方便起见,复制如下)。我的理解是,前42个字节应该包含我认为用python模块读取/解码的元帧

我从一件非常简单的事情开始

import select, socket
from struct import *

port = 19090
bufferSize = 512

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('localhost', port))
s.setblocking(0)

i=0
while i<10:
  result = select.select([s],[],[])
  msg = result[0][0].recv(bufferSize)
  # The meta section?
  msg = msg[:42]

  # Log raw bytes
  #print ' '.join('{0:08b}'.format(ord(x), 'b') for x in msg)

  print unpack(">QIxBHIHIIIQ", msg)  # big endian
  i += 1
导入选择,套接字
从结构导入*
端口=19090
缓冲区大小=512
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s、 绑定(('localhost',端口))
s、 设置锁定(0)
i=0

虽然我没有任何例子,但我在过去几天遇到了类似的问题,因此我找到了这个库。但这里有一个例子:


如果没有问题,我也可以删除我的答案。

我没有任何例子,但我在过去几天遇到了类似的问题,因此我找到了这个库。但这里有一个例子:


如果不合适,我也可以删除我的答案。

一个起点不使用
struct
解码,为什么?你永远不会确定我的解码模式是正确的。这样:
hex\u val=binascii.hexlify(sock.recv(512))
。您的问题状态模糊,因为
AUTH、ACK、SYN等部分在哪里?如果您完成了所有的
packet=bin(hex_val[84])
则不是正确的部分
UDP
packet不仅可以在单个UDP数据包中插入
multi-header+data
。如果丢失了一部分数据(数据的下一部分未定义),则无法对数据包进行解码。(如果可能,请添加wireshark转储)。起始点不使用
struct
进行解码,为什么?你永远不会确定我的解码模式是正确的。这样:
hex\u val=binascii.hexlify(sock.recv(512))
。您的问题状态模糊,因为
AUTH、ACK、SYN等部分在哪里?如果您完成了所有的
packet=bin(hex_val[84])
则不是正确的部分
UDP
packet不仅可以在单个UDP数据包中插入
multi-header+data
。如果丢失了一部分数据(未定义数据的下一部分),则无法对数据包进行解码。(如果可能,请添加wireshark转储)。 hardware block (2 byte I or Q samples): |I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q:I/Q| UDP block (22 bytes): |xxxxxxxxxxxxxxxxxxxxxx| Frame: |Meta:xxxxxxxxxxxxxxxxx|I/Q:I/Q:I/Q:I/Q:I/Q:xx|I/Q:I/Q:I/Q:I/Q:I/Q:xx|I/Q:I/Q:I/Q:xxxxxxxxxx| Number of samples in a hardware block: 13 Number of blocks in a frame..........: 1 (always if uncompressed) Number of bytes in a frame...........: 52 (4 * 13) Complete blocks......................: 2 (calculated) Remainder samples....................: 3 (calculated)