zoukankan      html  css  js  c++  java
  • 用struct模块解决tcp的粘包问题

    服务器端程序

    import struct
    import socket
    
    sk = socket.socket()
    sk.bind(('127.0.0.1',9000))
    sk.listen()
    
    conn,addr = sk.accept()
    send_msg = input('>>>').encode()
    bytes_len = struct.pack('i',len(send_msg))
    conn.send(bytes_len)
    conn.send(send_msg)   # 粘包现象
    conn.send(b'world')
    conn.close()
    sk.close()
    
    # 1.发送端的粘包  合包机制 + 缓存区
    # 2.接收端的粘包  延迟接受 + 缓存区
    # 3.流式传输
        # 电流 高低电压
        # 所以我们说 tcp协议是无边界的流式传输
    # 4.拆包机制
    
    # 粘包现象的本质
    # 接收端不知道发送端给我发送了多长的数据

    客户端程序

    import struct
    import socket
    
    sk = socket.socket()
    sk.connect(('127.0.0.1',9000))
    bytes_len = sk.recv(4)
    msg_len = struct.unpack('i',bytes_len)[0]
    msg = sk.recv(msg_len)
    print(msg.decode())
    msg2 = sk.recv(5)
    print(msg2)
    sk.close()
  • 相关阅读:
    前端之HTML补充
    前端之HTML
    mysql 视图,触发器,存储
    mysql 函数 事务
    索引扩展
    mysql数据库索引相关
    mysql 存储过程查询语句
    mysql 单表查询
    mysql 多表连接查询
    js引入的几种简单写法
  • 原文地址:https://www.cnblogs.com/chen55555/p/10318131.html
Copyright © 2011-2022 走看看