您从中得到的
recv是一个
bytes字符串:
从套接字接收数据。返回值是一个字节对象,表示接收到的数据。
在Python
3.x中,要将
bytes字符串转换为Unipre文本
str字符串,您必须知道该字符串使用什么字符集编码,因此可以调用
depre。例如,如果它是UTF-8:
stringdata = data.depre('utf-8')
(在Python 2.x中,
bytes它和一样
str,因此您已经 有了
一个字符串。但是,如果要获取Unipre文本
unipre字符串,则与3.x中的相同。)
人们经常使用的原因
struct是数据不仅是8位或Unipre文本,而是其他某种格式。例如,您可以将每个消息作为“
netstring
”发送:长度(作为ASCII数字字符串),后跟一个
:分隔符,然后
length是UTF-8字节,然后是一个
,-如
b"3:Abc,"。(格式上有一些变体,但这是伯恩斯坦标准的网络字符串。)
人们使用netstrings或其他类似技术的原因是,在使用TCP时需要某种分隔消息的方法。每个都
recv可以给您对方传递的一半
send,或者可以让您获得3分
send和4分之一。因此,您必须积累一个
recv数据缓冲区,然后再将消息拉出。而且,您需要某种方法来告知一条消息何时结束,下一条消息何时开始。如果您只是发送没有任何换行符的纯文本消息,则可以仅使用换行符作为分隔符。否则,您将不得不提出其他建议-
可能是网串,或者用作分隔符,或者使用换行符作为分隔符,但在数据中转义了实际的换行符,或者使用某些自定界的结构化格式(例如JSON)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)