Вам всегда нужно перебирать socket.recv () в Python, пока вы не получите столько данных, сколько ожидаете? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть сервер Python 3, и клиент Python общается друг с другом, и клиент отправляет серверу некоторые данные.

Если клиент использует s.send(data) для отправки 8 байтов данных всервер, может ли сервер предполагать, что s.recv(8) вернет 8 байт данных?Или мне нужно сделать что-то вроде:

data_expected = 8
data_received = 0
data = bytes()

while True:
    data_remaining = data_expected - data_received
    data_chunk = s.recv(data_remaining)

    if data_chunk:
        data += data_chunk
        data_received += len(data_chunk)

        if data_received == data_expected:
            # We got the full 8 bytes
            break
    else:
        # We didn't get the full 8 bytes, but the client stopped sending
        break

Когда s.recv(x) вернет меньше данных, чем x?Только когда клиент закончит отправку и закроет сокет?Если клиент запускает s.send(y), где y < x?Или в любое время?

Нужно ли ВСЕГДА вызывать s.recv() в цикле, пока я не получу столько данных, сколько ожидаю?Или, если я знаю, что клиент отправляет все 8 байтов за один вызов s.send (), я могу просто использовать s.recv(8)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...