首页IT科技python tcp粘包(python如何解决黏包问题)

python tcp粘包(python如何解决黏包问题)

时间2025-09-19 14:56:10分类IT科技浏览5567
导读:1、了解发送数据的大小,设置接收的大小,这样就可以正好接收所有的数据。黏包问题是由于tcp的优化算法将两个不太大的数据包组合在一起发送的。...

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基础教程

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
下面哪一段代码会综合出latch(哪段儿代码更优雅,可读性更高,更Pythonic?)