Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字发送Uint16和Uint32_Python_Sockets_Encoding_Packed - Fatal编程技术网

Python套接字发送Uint16和Uint32

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

我需要通过具有以下结构的python套接字发送请求:

{
   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!那么,我将创建一个答案。