重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
小编给大家分享一下python怎么解决黏包问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
站在用户的角度思考问题,与客户深入沟通,找到抚宁网站设计与抚宁网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广、域名注册、网页空间、企业邮箱。业务覆盖抚宁地区。
1、了解发送数据的大小,设置接收的大小,这样就可以正好接收所有的数据。黏包问题是由于tcp的优化算法将两个不太大的数据包组合在一起发送的。
这种情况通常发生在连续使用几个send()时。
这是远程执行cmd命令并返回结果的程序 server端代码 import struct import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() conn,addr = sk.accept() while True: cmd = input('>>>') conn.send(bytes(cmd,encoding='utf-8')) num = conn.recv(1024).decode('utf-8') #接收client端计算好的数据长度 conn.send(bytes('ok',encoding='utf-8')) #发送一个确认防止发送num的时候跟后面的send内容合并了 ret = conn.recv(num) print(ret.decode('gbk')) conn.close() sk.close()
2、使用struct模块解决粘合现象。
server端代码 #tcp黏包现象的解决 struct import struct import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() conn,addr = sk.accept() while True: cmd = input('>>>') conn.send(bytes(cmd,encoding='utf-8')) # num = conn.recv(1024).decode('utf-8') num = conn.recv(1024) #接收数据 num = struct.unpack('i',num)[0]#进行解包,解包的结果是一个元组类型取第一个数据 # conn.send(bytes('ok',encoding='utf-8')) ret = conn.recv(num) print(ret.decode('gbk')) conn.close() sk.close()
以上是“python怎么解决黏包问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!