В этом коде есть разные проблемы.
Во-первых, неправильный цикл чтения.TCP - это потоковый протокол.Это означает, что данные могут входить в переменное количество пакетов, которые необходимо объединить.Так должно быть:
image_binaries = b""
while True:
chunk = s.recv(100000000)
if not chunk:
break
image_binaries += chunk
s.close()
Тогда у вас есть возможное состояние гонки со стороны сервера.client.send(data)
вернется, как только все данные будут поставлены в очередь для передачи.Если немедленно произойдет другое соединение, client
будет использовано повторно, что может привести к закрытию предыдущего соединения до того, как все будет отправлено.Вы должны использовать изящное отключение здесь:
while True:
client, client_address = s.accept()
print(client_address, "is connected")
client.send(data)
client.shutdown(socket.SHUT_WR) # notify that nothing more is to be sent
_ = client.recv(16) # wait for the client to close when everything has been received
client.close() # Ok, we can explicitely close