2
我目前正在尝试通过关于网络的基本教程,我注意到一个基本的客户端/服务器程序将冻结在服务器试图从客户端读取更多数据时,所有的数据是收到。基本上,代码如下所示:在recv方法python TCP套接字块
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时,收到请求消息。
而不是跳到下一行(更多为0)调试器只是冻结在那里,我不知道这可能是什么原因。
我的操作系统是Windows XP,如果这是相关的任何方式。任何帮助,将不胜感激, 谢谢
套接字是否非阻塞? – 2012-03-19 12:55:27
这就是套接字的工作方式,它们默认是阻塞的。您可以使用'select'来检查是否有数据在套接字中读取,或使用非阻塞IO。 – cha0site 2012-03-19 13:02:41
所以当我调用recv(1024)时,实际上发生了什么,并且正好有1024个字节需要读取?有没有办法知道是否有更多的数据? – 2012-03-19 13:38:27