У меня есть сервер 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)
?