2
我想在Python中编写一个服务器来与预先存在的客户端进行通信,该客户端的消息数据包是ASCII字符串,但由四字节无符号整数值表示,前者表示长度为剩余字符串。Python字符串前缀4字节长度
我已经做了一个接收器,但我确信有一个更pythonic的方式。直到我找到它,我还没有完成发件人。我可以很容易地计算消息长度,将其转换为字节并传输消息。我努力的是创建一个四字节数组的整数。
让我澄清一下:如果我的字符串长度为260个字符,我希望预先包含一个260字节的大端四字节整数表示形式。所以,我不希望字符串前面的ASCII字符串“0260” ,相反,我需要代表0x00000104的四个(非ASCII)字节。
我对代码收到从客户端前缀字符串的长度是这样的:
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)什么是“姐妹”的方法来编码传输的长度?
谢谢。
我知道我在做这件事很难。谢谢! – KDM
我发现解压缩返回一个元组,所以我不得不长度= struct.unpack(“>我”,received_msg [:4])[0] – KDM
哦,对不起,你是对的。我会更新我的答案 – Pedru