cof*_*tor 11 python struct recv python-3.x
我正在挖掘python和网络.
while True:
data = sock.recv(10240)
Run Code Online (Sandbox Code Playgroud)
这绝对是在倾听.但它似乎需要转换为文本字符串.
我见过一些人使用struct.unpack(),但我不确定它是如何工作的.转换的方式是什么?
aba*_*ert 22
你从中得到的recv是一个bytes字符串:
从套接字接收数据.返回值是表示接收数据的字节对象.
在Python 3.x中,要将bytes字符串转换为Unicode文本str字符串,您必须知道字符串编码的字符集,以便您可以调用decode.例如,如果它是UTF-8:
stringdata = data.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
(在Python 2.x中,bytes它是一样的str,所以你已经有了一个字符串.但是如果你想获得一个Unicode文本unicode字符串,它与3.x中的相同.)
人们经常使用的原因struct是数据不仅仅是8位或Unicode文本,而是其他一些格式.例如,您可以将每条消息作为" netstring "发送:一个长度(作为一个ASCII数字字符串)后跟一个:分隔符,然后length是UTF-8的字节,然后是,- 例如b"3:Abc,".(格式上有变体,但这是Bernstein标准的netstring.)
人们使用网络字符串或其他类似技术的原因是,当您使用TCP时,需要某种方式来分隔消息.每一个都recv可以给你另一方传递的一半send,或者它可以给你的3 send秒和第4 个的一部分.因此,您必须累积recv数据缓冲区,然后从中拉出消息.你需要一些方法来判断一条消息何时结束,另一条消息何时开始.如果您只是发送没有任何换行符的纯文本消息,则可以使用换行符作为分隔符.否则,你就必须拿出别的东西,也许netstrings,或使用\0作为分隔符,或使用换行符作为分隔符,但在数据中逸出的实际换行,或者使用类似JSON一些自分隔的结构化格式.
在Python 2.7.x及之前版本中,data已经是一个字符串。在Python 3.x中,data是一个字节对象。要将字节转换为字符串,请使用该decode()方法。 decode()将需要编解码器参数,例如“utf-8”。
| 归档时间: |
|
| 查看次数: |
35900 次 |
| 最近记录: |