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合并多个装饰器?

Python的爬虫框架有哪些

Python中range() 函数的使用介绍(附代码)

Python可以自学吗

Python做出新闻聚合项目

笨办法学Python3这本书好吗

Python如何合并两个字典?(代码示例)

Python的注释有哪几种

详解Python使用asyncio包处理并发的方法

关于Python如何实现登录接口的方法分享

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




打赏

取消

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

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

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

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

评论

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