温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python怎么解决黏包问题

发布时间:2021-09-07 11:36:18 来源:亿速云 阅读:113 作者:小新 栏目:编程语言

小编给大家分享一下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怎么解决黏包问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI