fsm*_*fsm 1 python sockets send recv
这篇文章被错误地标记为“发送”,因为我无法创建新标签。
我对这个简单的回显服务器有一个非常基本的问题。这是一些代码片段。
客户
while True:
data = raw_input("Enter data: ")
mySock.sendall(data)
echoedData = mySock.recv(1024)
if not echoedData: break
print echoedData
Run Code Online (Sandbox Code Playgroud)
服务器
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()
Run Code Online (Sandbox Code Playgroud)
现在一切正常,除非客户端发送一个空字符串(通过按回车键响应“输入数据:”),在这种情况下我会看到一些死锁行为。
现在,当用户在客户端按下回车键时到底会发生什么?我只能想象,sendall调用会阻塞等待一些数据添加到发送缓冲区,从而导致recv调用依次阻塞。这里发生了什么?
谢谢阅读!
更像是,该sendall()
调用不执行任何操作(因为没有数据要发送),因此客户端recv()
上的调用会阻塞等待数据,但由于没有向服务器发送任何内容,因此服务器永远不会发送回任何数据,因为它也被阻塞在其上初始,因此两个进程都被阻塞。recv()
归档时间: |
|
查看次数: |
5027 次 |
最近记录: |