zoukankan      html  css  js  c++  java
  • 粘包现象及处理方式

    1.客户端接受不及时造成的粘包

    server端
    import socket
    sk=socket.socket()
    sk.bind(('127.0.0.1',9003))
    sk.listen()
    moon,addr=sk.accept()
    moon.send("还好吗?".encode())
    moon.send("在吗?".encode())
    moon.close()
    sk.close()
    
    client端
    import socket
    import time
    sk=socket.socket()
    
    sk.connect(('127.0.0.1',9003))
    time.sleep(1)
    mas=sk.recv(1024).decode()
    mgs=sk.recv(1024).decode()
    print(mas)
    print(mgs)
    

    2.服务端发送的数据短并且连续发送

    server端
    
    import socket
    sk=socket.socket()
    sk.bind(('127.0.0.1',9003))
    sk.listen()
    moon,addr=sk.accept()
    moon.send("还好吗?".encode())
    moon.send("在吗?".encode())
    moon.close()
    sk.close()
    
    client端
    
    import socket
    import time
    sk=socket.socket()
    sk.connect(('127.0.0.1',9003))
    for i in range(10000):
        i*i
    mas=sk.recv(1024).decode()
    mgs=sk.recv(1024).decode()
    print(mas)
    print(mgs)
    
    # 粘包现象
    # 当多条消息发送时接受变成了一条或者出现接收不准确的情况
    # 粘包现象会发生在发送端
        # 两条消息间隔时间短,长度短 就会把两条消息在发送之前就拼在一起
        # 节省每一次发送消息回复的网络资源
    # 粘包现象会发生在接收端
        # 多条消息发送到缓存端,但没有被及时接收,或者接收的长度不足一次发送的长度
        # 数据与数据之间没有边界
    # 本质 : 发送的每一条数据之间没有边界
    

    粘包的解决方法

    server端
    import socket
    import struct
    
    def dd(mgs):
        mgs=mgs.encode()
        len1=len(mgs)
        len_zj=struct.pack("i",len1)/字节
        noom.send(len_zj)
        noom.send(mgs)
    sk=socket.socket()
    sk.bind(('127.0.0.1',9003))
    sk.listen()
    noom,addr=sk.accept()
    mgs1="你好"
    mgs2="你也好"
    dd(mgs1)
    dd(mgs2)
    noom.close()
    sk.close()
    
    
    
    client端
    import socket
    import struct
    import time
    def func():
        len_zj=sk.recv(4)
        len_mgs=struct.unpack("i",len_zj)[0]/元组类型的数(11,)
        mgs=sk.recv(len_mgs).decode()
        return mgs
    sk=socket.socket()
    sk.connect(('127.0.0.1',9003))
    time.sleep(3)
    msg1=func()
    msg2=func()
    print(msg1)
    print(msg2)
    
  • 相关阅读:
    k8s之pod与Pod控制器
    使用kubeadm部署k8s
    lamp架构
    数据库安装和基本操作
    mysql基础
    Helm Chart 一键部署 Jenkins
    使用 Helm Chart 部署及卸载 istio
    使用 chart 部署 skywalking
    豆瓣电影TOP250和书籍TOP250爬虫
    如何使用 Skywalking Agent ?
  • 原文地址:https://www.cnblogs.com/python25/p/11578602.html
Copyright © 2011-2022 走看看