Моя клиентская сторона не может получить два сообщения, если отправитель отправил слишком быстро.
sender.py
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', int(port)))
sock.listen(1)
conn, addr = sock.accept()
#conn.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
# sends message 1 and message 2
conn.send(pickle.dumps(message1))
#time.sleep(1)
conn.send(pickle.dumps(message2))
, где и сообщение 1, и сообщение 2 являются протравленными объектами.
client.py
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((ip,int(port)))
message1 = pickle.loads(sock.recv(1024))
print(message1)
message2 = pickle.loads(sock.recv(1024))
Когда я запускаю этот код как есть, я могу распечатать сообщение1, но не могу получить сообщение2 от отправителя. Сокет блокируется на message2.
Кроме того, если я раскомментирую time.sleep (1) в своем коде на стороне отправителя, я смогу получить оба сообщения очень хорошо. Не уверен, в чем проблема. Я пытался каждый раз очищать свой буфер TCP, устанавливая TCP_NODELAY, но это не сработало. Не уверен, что на самом деле происходит? Как я могу гарантировать, что я получу два сообщения