gpt4 book ai didi

Python - 将 sock.recv 转换为字符串

转载 作者:太空狗 更新时间:2023-10-29 17:55:33 29 4
gpt4 key购买 nike

我正在研究 python 和网络。

while True:
data = sock.recv(10240)

这绝对是在听。不过好像需要转成文本字符串。

我见过一些人使用 struct.unpack(),但我不确定它到底是如何工作的。转换的方法是什么?

最佳答案

您从 recv 得到的结果是一个 bytes 字符串:

Receive data from the socket. The return value is a bytes object representing the data received.

在 Python 3.x 中,转换 bytes字符串转换为 Unicode 文本 str string,你必须知道这个字符串是用什么字符集编码的,所以你可以调用decode .例如,如果它是 UTF-8:

stringdata = data.decode('utf-8')

(在 Python 2.x 中,bytesstr 相同,所以您已经得到了一个字符串。但是如果你想得到一个 Unicode 文本 unicode 字符串,它与 3.x 中的相同。)

人们经常使用 struct 的原因是数据不仅仅是 8 位或 Unicode 文本,而是一些其他格式。例如,您可以将每条消息作为“netstring”发送:长度(作为 ASCII 数字字符串)后跟 : 分隔符,然后是 length 字节UTF-8,然后是 ,——例如 b"3:Abc,"。 (格式有变体,但这是 Bernstein 标准网串。)

人们使用 netstrings 或其他类似技术的原因是,当您使用 TCP 时,您需要某种方式来分隔消息。每个 recv 可以给你另一方用 send 传递的一半,或者它可以给你的 3 个 send 和第四个的一部分。因此,您必须积累一个 recv 数据缓冲区,然后从中提取消息。您需要某种方式来判断一条消息何时结束以及下一条消息何时开始。如果您只是发送没有任何换行符的纯文本消息,您可以只使用换行符作为分隔符。否则,您将不得不想出其他办法——可能是 netstrings,或者使用 \0 作为分隔符,或者使用换行符作为分隔符但转义数据中的实际换行符,或者使用一些自分隔的结构化格式,如 JSON。

关于Python - 将 sock.recv 转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13979764/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com