gpt4 book ai didi

python socket.recv/sendall 调用阻塞

转载 作者:太空宇宙 更新时间:2023-11-04 11:04:28 24 4
gpt4 key购买 nike

这篇文章被错误地标记为“发送”,因为我无法创建新标签。

关于这个简单的回显服务器,我有一个非常基本的问题。以下是一些代码片段。

客户

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 调用依次阻塞。这里发生了什么?

感谢阅读!

最佳答案

更像是,sendall() 调用什么都不做(因为没有数据要发送),因此 client< 上的 recv() 调用/em> 阻塞等待数据,但由于没有任何数据发送到服务器,服务器永远不会发回任何数据,因为它也在其初始 recv() 上被阻塞,因此两个进程都被阻塞。

关于python socket.recv/sendall 调用阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2549788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com