【发布时间】:2010-03-31 01:09:43
【问题描述】:
由于我无法创建新标签,因此该帖子被错误地标记为“发送”。
我对这个简单的回显服务器有一个非常基本的问题。这里有一些代码sn-ps。
客户
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()
现在这可以正常工作了,除非客户端发送一个空字符串(通过点击返回键以响应“输入数据:”),在这种情况下我看到一些死锁行为。
现在,当用户在客户端按下 return 时究竟会发生什么?我只能想象 sendall 调用阻塞等待将一些数据添加到发送缓冲区,导致 recv 调用依次阻塞。这里发生了什么?
感谢阅读!
【问题讨论】: