Python套接字发送Uint16和Uint32
我需要通过具有以下结构的python套接字发送请求:Python套接字发送Uint16和Uint32,python,sockets,encoding,packed,Python,Sockets,Encoding,Packed,我需要通过具有以下结构的python套接字发送请求: { Uint16 data_one Uint16 data_one Uint32 data_one } 我让我的服务器和客户机工作,但我真的不知道如何对此类数据进行编码和解码以通过套接字发送。谢谢 查看中的函数。使用struct.pack生成ByTestStream并通过线路发送,然后在另一端使用struct.unpack解包数据: # sender buffer = struct.pack('!3H', *data) #
{
Uint16 data_one
Uint16 data_one
Uint32 data_one
}
我让我的服务器和客户机工作,但我真的不知道如何对此类数据进行编码和解码以通过套接字发送。谢谢 查看中的函数。使用
struct.pack
生成ByTestStream并通过线路发送,然后在另一端使用struct.unpack
解包数据:
# sender
buffer = struct.pack('!3H', *data)
# ... send it
# receiver
# ... get the buffer
data = struct.unpack('!3H', buffer)
考虑构造库: 与Protobuf类似但不同的是,它允许您定义“打包”数据格式,这在处理打包数据格式(如网络数据包或专有数据格式)时非常理想
来自构造导入结构,Int16ub,Int32ub
#您的数据格式
my_packet_struct=struct(
“field1”/Int16ub,
“field2”/Int16ub,
“field3”/Int32ub
)
#有些数据需要序列化。
#dict密钥需要与上述数据包格式中的密钥匹配,
#但不一定是相同的顺序
我的_数据={
“字段2”:321,
“字段1”:123,
“字段3”:999
}
#将数据序列化为字节
my_Serialized_bytes=my_数据包结构构建(my_数据)
打印(“序列化字节:{}”。格式(my_serialized_Bytes.hex())
#发送数据:socket.write(my_serialized_字节)
#反序列化以证明它正常工作
my_反序列化的_字节=my_数据包结构解析(my_序列化的_字节)
打印(“\n序列化对象:”)
打印(我的\u反序列化\u字节)
输出:
序列化字节:007B014100003E7
反序列化对象:
容器:
字段1=123
字段2=321
字段3=999
使用struct.pack
生成ByTestStream并通过网络发送,然后在另一端使用struct.unpack
解包数据。非常感谢,您解决了我的问题@JanChristopherasa!那么,我将创建一个答案。