项目中碰到了tcp透传下用protocol buffer协议的数据传输场景
记录下踩的坑~~
协议的定义大致举例如下:
数据传输协议组成部分分为header结构体和一个传输数据message体
header如下,其中某个param是需要截取的message包体长度(如这里是param_3)
struct header
{
unsigned short param_1; // 头信息定义参数1
unsigned short param_2; // 头信息定义参数2
unsigned short param_3; // 头信息定义参数3
}
message的结构为:
message request_params
{
optional uint64 param_4 = 1; // 参数4
optional string param_5 = 2; // 参数5
}
接口拿到的是二进制流,需要实现的步骤如下大致如下:
将拿到的二进制流转换到十六进制流hex_data(根据协议定义,字节截取是在十六进制下进行);
data = self.request.recv(10000)
data2 = data.encode('hex')
根据协议在约定的字节区间截取header中的param_3,这个值是后边需要截取的数据包字节长度,然后将param_3转换成二进制下的整型数字param_3_int;从header信息结束字节处开始,截取hex_data中长度为param_3_int*2的字节段;
param_3 = data2[x:y]
data4 = (int(str(param_