gpt4 book ai didi

recv方法上的python TCP套接字 block

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:56 25 4
gpt4 key购买 nike

我目前正在尝试学习网络基础教程,我注意到一个基本的客户端/服务器程序会在服务器尝试从客户端读取更多数据时卡住,当所有数据都收到时。基本上代码如下所示:

def recv_all(sock,length):
data=''
while len(data)<length:
more=sock.recv(length-len(data))
if not more :
raise EOFError('socket inchis %d octeti intr-un mesaj de %d octeti'%(len(data),length))
data+=more
return data

此函数从客户端和服务器调用,但服务器将首先使用它来处理客户端请求。一切顺利,直到第二次调用 sock.recv 时,收到请求消息。

调试器没有跳到下一行(more 为 0)而是卡住在那里,我不知道这可能是什么原因。

如果与此相关,我的操作系统是 Windows XP。任何帮助,将不胜感激, 谢谢

最佳答案

正如其他人指出的那样,原因是套接字默认情况下是阻塞的。这意味着 recv 函数将阻塞程序的执行,直到某些数据到达。除非事情发生改变,否则程序将永远等待,或者直到服务器断开连接。

一个解决方案是切换到非阻塞套接字,使用 settimeout 函数,例如 sock.settimeout(2)。这意味着如果在 2 秒内没有收到任何内容,将抛出异常。您可以捕获该异常并相应地处理它。

关于recv方法上的python TCP套接字 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9770567/

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