Вам нужно читать в цикле, пока вы не получите все входные данные.Вам нужен способ узнать, когда у вас есть все входные данные.
Если клиент пишет, а затем закрывает сокет, вы можете читать, пока не доберетесь до EOF.Если клиент не закрывает сокет, вам нужен какой-то способ узнать, сколько читать.Самое простое - заставить клиента отправить длинное слово перед отправкой символов.Вы читаете длину, а затем читаете столько символов.
Задержка - это хак, который пока может работать, но не надежен.Если в вашей сети наблюдается некоторое замедление, ваш код может прерваться.
Из ваших выводов видно, что вы закрываете поток на стороне клиента, даже если вы этого не показываете.Итак, вам просто нужно буферизовать все ваши данные, пока вы не достигнете конца потока.Это должно работать:
buffer = b''
try:
while True:
data = conn.recv(1024)
if not data:
break
buffer += data
except Exception as loopException:
print("Exception occurred in loop, exiting...", loopException)
finally:
s.close()
print('value received', buffer.decode('utf-8'))
Я думаю, что это будет работать.У меня нет связи, чтобы попробовать это, но моей IDE это нравится.Я не настолько знаком с потоками байтов Python 3.Если это не совсем работает, вы все равно должны получить представление здесь.