zoukankan      html  css  js  c++  java
  • python-socket 粘包问题

    解决粘包的问题:
    1.服务端在发送数据之前,先把发送数据的长度告诉客户端,要发送多少数据,然后客户端根据这个数据的长度循环接收就OK
    传输过程:
    服务端:
        1.send  #数据长度
        4.recv  #收到确认信息,开始下一步发送
        send  #发送数据
        
    客户端 :
        2.recv #获取数据长度
        3.send #发送确认信息
        recv #循环接收
     
    socket-server端代码:
                #解决粘包问题
                send_data = bytes(send_data,encoding='utf-8')  #编码成utf-8,字节,并把str转换为字节
                ready_tag = 'Ready|%s' %len(send_data)
                conn.send(bytes(ready_tag,encoding='utf-8'))
                feedback = conn.recv(1024)  #收到客户端发送过来的Start
                feedback = str(feedback,encoding='utf-8')  #把收到的feedback 转换为str
                if feedback.startswith('Start'):
                    conn.send(send_data)

    socket-client端代码:

    #解决粘包的问题
        ready_tag = s.recv(1024) # Ready|9999
        ready_tag = str(ready_tag,encoding='utf-8')
        if ready_tag.startswith('Ready'):  # Ready|9999
            msg_size = int(ready_tag.split('|')[-1])
        start_tag = 'Start'
        s.send(bytes(start_tag,encoding='utf-8')) #给server发送Start,告诉server可以准备发送数据了
        recv_size = 0  #初始化数据大小
        recv_msg =b''
    
        while recv_size < msg_size:
            recv_data = s.recv(1024)
            recv_msg += recv_data
            recv_size += len(recv_data)
            print('MSG SIZE %s RECE SIZE %s' % (msg_size, recv_size))
    
        print(str(recv_msg,encoding='utf-8'))
  • 相关阅读:
    模型
    smarty变量
    smarty变量调节器
    分页
    表单验证(注册)
    php数据库访问
    php面向对象 继承
    php 面向对象
    php正则数组
    php 函数
  • 原文地址:https://www.cnblogs.com/pangguoping/p/5675390.html
Copyright © 2011-2022 走看看