Python socket 接收不定长度数据的方法


import json

def sock_send_length(sock, data):
    '''
    在发送数据之前,先发送数据的长度。
    '''
    assert type(data) == bytes
    sock.send(json.dumps({
        'type': 'length',
        'length': len(data),
    }).encode())
    assert sock.recv(1024).decode() == 'continue'
    sock.send(data)

def sock_recv_length(sock):
    '''
    如果收到的数据包类型为 length,则再次接收一个指定长度的数据包并返回。
    否则直接返回该数据包。
    '''
    data = json.loads(sock.recv(1024).decode())
    if 'type' in data and data['type'] == 'length':
        sock.send(('continue').encode())
        return json.loads(sock.recv(int(data['length'])).decode())
    return data


深度学习推荐
深度学习推荐

墨之科技,版权所有 © Copyright 2017-2027

湘ICP备14012786号     邮箱:ai@inksci.com