您现在的位置是:课程教程文章

python如何解决黏包问题

2023-12-13 23:48课程教程文章 人已围观

1、了解发送数据的大小,设置接收的大小,这样就可以正好接收所有的数据。黏包问题是由于tcp的优化算法将两个不太大的数据包组合在一起发送的。

这种情况通常发生在连续使用几个send()时。

这是远程执行cmd命令并返回结果的程序
server端代码
importstruct
importsocket
sk=socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
conn,addr=sk.accept()
whileTrue:
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
importstruct
importsocket
sk=socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
conn,addr=sk.accept()
whileTrue:
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解决黏包问题的方法,希望对大家有所帮助。更多Python学习指路:python基础教程

本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

课程教程:python如何解决黏包问题

上一篇:python链表的乘法问题

下一篇:没有了

站点信息

  • 文章统计篇文章