Я пытаюсь создать что-то вроде диалога между сервером и клиентом.Это объясняется следующим:
Client + Server
---------------------
send(foo) | recv(foo)
recv(bar) | send(bar)
send(foobar)| recv(foobar)
recv(barfoo)| send(barfoo)
etc.....................
Итак, все, что я пытаюсь сделать, - это добиться успешного «диалогового» обмена сообщениями между сервером и клиентом.Проблема в том, что через некоторое время одна из двух конечных точек выйдет из синхронизации.Это приводит к тому, что терминал работает в состоянии, когда обе стороны приостановили свое выполнение, пытаясь выполнить блокирующий вызов send
или recv
, конечно, не имея возможности.
Есть ликакие операции мне не хватает?
Я создаю сокеты со следующим кодом (Python3)
Для сервера:
#!/usr/bin/python3
#server.py
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind((str(address_port[0]), int(address_port[1])))
serversocket.listen()
clientsocket, addr = serversocket.accept()
msg_rcv = clientsocket.recv(1024) # recv foo
clientsocket.send("foo".encode('ascii')) # send bar
msg_rcv = clientsocket.recv(1024) # recv foobar
clientsocket.send("foo".encode('ascii')) # send barfoo
#etc...
Для клиента:
#!/usr/bin/python3
#client.py
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect((host, port))
clientsocket.send("foo".encode('ascii')) # send foo
msg_rcv = clientsocket.recv(1024) # recv bar
clientsocket.send("foobar".encode('ascii')) # send foobar
msg_rcv = clientsocket.recv(1024) # recv barfoo
Любая помощь будет принята с благодарностью.