这个职位是不正确的标记“发送”,因为我无法创建新的标签。

我对这个简单的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调用阻塞等待一些数据添加到发送缓冲区,导致接收调用反过来阻止。这里发生了什么?

感谢阅读!

有帮助吗?

解决方案

更多类似的sendall()调用什么也不做(因为没有要发送的数据),从而对的客户的块等待数据的recv()电话,但因为没有被发送到服务器时,服务器永远不会发送任何数据返回,因为它也被阻止在其初始recv(),并且因此这两个过程被阻断。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top