由于我无法创建新标签,因此该帖子被错误地标记为“发送”。
关于这个简单的回声服务器,我有一个非常基本的问题。以下是一些代码片段。
客户
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 调用依次阻塞。这里发生了什么?
谢谢阅读!