千家信息网

python怎么解决黏包问题

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,小编给大家分享一下python怎么解决黏包问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、了解发送数据的大小,设置接
千家信息网最后更新 2025年01月17日python怎么解决黏包问题

小编给大家分享一下python怎么解决黏包问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

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

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

这是远程执行cmd命令并返回结果的程序server端代码import structimport socketsk = 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黏包现象的解决 structimport structimport socketsk = 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怎么解决黏包问题"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0