• 技术文章 >Python技术 >Python基础教程

    python如何解决黏包问题

    小妮浅浅小妮浅浅2021-09-11 09:37:06原创2520

    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解决黏包问题的方法,希望对大家有所帮助。更多Python学习指路:python基础教程

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

    专题推荐:python黏包问题
    上一篇:python多行读写的操作 下一篇:python链表的乘法问题

    相关文章推荐

    • Python位置索引的介绍• Python yield关键字的应用限制• Python yield实现迭代器协议• python列表删除项目的方法• Python删除列表中的非字母字符• python创建实例中类属性的变化• python默认参数的使用注意• python变长参数的使用注意• python变长参数的使用场景• python建立文本文件的两种途径• python多行读写的操作

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网