Python解析Socket数据流异常bytes的问题(详细)


当前第2页 返回上一页

2)数据流拆分,再处理
一般socket服务端在发送数据时,每个数据流是完整的,并会以特定的字符(如:\n)结束一并发送。根据这种现状,我们在每次接受数据时,根据这个特定字符拆分(split)为一个保存单个数据流的列表。列表的第一个流可能为不完整,把它和上次接受的流合并为一个完整的数据流并转义;中间为可以正常转义的数据流;最后一个流也为不完整,保存下来,用来拼接下次接受的流,并重复上述操作,这样保障了程序不会异常退出,也保障数据的完整性。大致代码如下:
数据接受情况:

第一次接受 msg1 = b'\xe5\x88\x86\n\xe9' ; # 钟 被拆分成 \xe9 和 \x92\x9f
第二次接受 msg2 = b'\x92\x9f_stone\n'

1

2

3

4

5

6

7

8

9

10

init_msg = b'' # 初始化流

  while True:

    msg = soc.recv(128) # 接受数据

    init_msg += msg

    msg_arr = init_msg.split(b'\n') # 注意此处的 b'\n' ,因为被拆分的为bytes串,所以也要用bytes串来拆分

    init_msg += msg_arr[-1]

    msg_arr.remove(msg_arr[-1])

    for i in range(len(msg_arr)):

      string = msg_arr[i].decode('utf-8')

      print(string

以上就是Python解析Socket数据流异常bytes的问题(详细)的详细内容,更多文章请关注木庄网络博客!!

返回前面的内容

相关阅读 >>

Python画圆运用了什么函数

flask 和 django 区别

Python flask实现分页效果的实例详解

如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍

Python如何发送邮件

Python库怎么安装

Python中none表示什么

Python实现购物车购物小程序

Python里pop是什么意思

Python能画3d图吗

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...