一次又一次使用的socket.send和socket.recv导致客户端与服务器之间的通信不同步Python3

时间:2018-10-15 23:54:02

标签: python-3.x sockets send recv

我正在尝试在服务器-客户端之间创建类似对话框的内容。以下说明了这一点:

Client      +   Server
---------------------
send(foo)   |  recv(foo)
recv(bar)   |  send(bar)
send(foobar)|  recv(foobar)
recv(barfoo)|  send(barfoo)
etc.....................

因此,我要做的就是在服务器和客户端之间实现成功的“类似对话框”的消息交换。问题是两个端点中的一个端点在一段时间后将失去同步。这导致终端运行状态,双方都试图通过执行sendrecv的阻塞调用来暂停执行,这当然是不行的。

我缺少任何操作吗?

我正在使用以下代码(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

任何帮助将不胜感激。

0 个答案:

没有答案