由于我无法创建新标记,因此该帖子被错误地标记为“发送”。
我对这个简单的echo服务器有一个非常基本的问题。以下是一些代码段。
客户端
while True:
data = raw_input("Enter data: ")
mySock.sendall(data)
echoedData = mySock.recv(1024)
if not echoedData: break
print echoedData
服务器
while True:
print "Waiting for connection"
(clientSock, address) = serverSock.accept()
print "Entering read loop"
while True:
print "Waiting for data"
data = clientSock.recv(1024)
if not data: break
clientSock.send(data)
clientSock.close()
现在这个工作正常,除非客户端发送一个空字符串(通过点击返回键以响应“输入数据:”),在这种情况下,我看到一些死锁行为。
现在,当用户在客户端按下返回时会发生什么?我只能想象sendall调用阻塞等待一些数据被添加到发送缓冲区,导致recv调用依次阻塞。这里发生了什么?
感谢阅读!
答案 0 :(得分:3)
更像是,sendall()
调用什么都不做(因为没有数据要发送),因此客户端上的recv()
调用阻塞等待数据,但是没有任何内容发送到服务器,服务器永远不会发回任何数据,因为它也在其初始recv()
上被阻止,因此两个进程都被阻止。