Пайтон. Socket. Как получать все данные с socket.recv ()?

Я имею проблему по отношению к клиенту с получением данных о сервере. У меня есть следующая функция стороны клиента, который пробует получить данные о сервере. Данные, посланные Сервером посредством функции socket.sendall(datos) они большие, чем buff_size следовательно я нуждаюсь в цикле, который читал бы данные.

def recibirTodo(sock):
    datos = ""
    buff_size=4096
    while True:
       parte = sock.recv(buff_size)     
       datos += parte
       if parte < buff_size:
             break;
    return datos

Проблема, которая происходит со мной, состоит в том, что после первого повторения (он читает первые 4096 МБ), в секунде программа остается блокированной ожидая остальных данных в parte = sock.recv(buff_size). Как я должен делать для того, чтобы recv() смогите продолжать читать остальные данные, которых нет? Спасибо

3
задан 11.01.2017, 17:48
0 ответов

Пробуй.

while True:
    try:
        # Recibir datos del cliente.
        input_data = conn.recv(1024)
    except error:
        print("Error de lectura.")
        break
    else:
        if input_data:
            # Compatibilidad con Python 3.
            if isinstance(input_data, bytes):
                end = input_data[0] == 1
            else:
                end = input_data == chr(1)
            if not end:
                # Almacenar datos.
                f.write(input_data)
            else:
                break
1
ответ дан 03.12.2019, 17:45