Python字符串前缀,长度为4字节

Python字符串前缀,长度为4字节,python,string-length,bytestream,Python,String Length,Bytestream,我试图用Python编写一个服务器,与一个预先存在的客户机通信,该客户机的消息包是ASCII字符串,但前面是代表剩余字符串长度的四字节无符号整数值 我已经做了一个接收器,但我相信还有一个更像蟒蛇的方法。在我找到它之前,我还没有做过寄件人。我可以轻松地计算消息长度,将其转换为字节并传输消息。我正在努力创建一个整数,它是一个由四个字节组成的数组 让我澄清一下:如果我的字符串长度是260个字符,那么我希望在前面加上一个四字节的整数,表示为260。因此,我不希望ASCII字符串“0260”在字符串前面,

我试图用Python编写一个服务器,与一个预先存在的客户机通信,该客户机的消息包是ASCII字符串,但前面是代表剩余字符串长度的四字节无符号整数值

我已经做了一个接收器,但我相信还有一个更像蟒蛇的方法。在我找到它之前,我还没有做过寄件人。我可以轻松地计算消息长度,将其转换为字节并传输消息。我正在努力创建一个整数,它是一个由四个字节组成的数组

让我澄清一下:如果我的字符串长度是260个字符,那么我希望在前面加上一个四字节的整数,表示为260。因此,我不希望ASCII字符串“0260”在字符串前面,而是希望四个(非ASCII)字节代表0x00000104

从客户端接收长度前缀字符串的代码如下所示:

sizeBytes = 4 # size of the integer representing the string length

# receive big-endian 4 byte integer from client
data = conn.recv(sizeBytes)
if not data: 
    break

dLen = 0
for i in range(sizeBytes):
    dLen = dLen + pow(2,i) * data[sizeBytes-i-1]

data = str(conn.recv(dLen),'UTF-8')
我可以做相反的事情。我是Python新手,我觉得我所做的可能是徒劳的

1) 是否有更好的接收和解码长度的方法

2) 为传输编码长度的“姐妹”方法是什么

谢谢。

模块在这里很有用

写作:

import struct
msg = 'some message containing 260 ascii characters'
length = len(msg)
encoded_length = struct.pack('>I', length)
编码的\u长度将是一个值为“\x00\x00\x01\x04”的4字节字符串

阅读:

length = struct.unpack('>I', received_msg[:4])[0]

使用
asyncio
的示例:

导入异步IO
导入结构
def发送消息(编写器、消息):
data=message.encode()
大小=结构包('>L',长度(数据))
writer.write(大小+数据)
异步def接收_消息(读卡器):
数据=等待读卡器。精确读取(4)
size=struct.unpack('>L',data)[0]
数据=等待读卡器。读取准确(大小)
返回数据。解码()

完整的代码是

我知道我做得很艰难。谢谢我发现unpack返回一个元组,所以我必须使用length=struct.unpack(“>I”,received_msg[:4])[0]