无法摆脱python循环

时间:2009-09-21 17:08:23

标签: python sockets loops

我想在没有数据的情况下退出循环,但循环似乎停在recvfrom

image=''
while 1:
        data,address=self.socket.recvfrom(512)
        if data is None:break
        image=image+data
        count=count+1
        print str(count)+' packets received...'

4 个答案:

答案 0 :(得分:4)

尝试设置为non-blocking socket。您可以在循环开始之前执行此操作。您也可以尝试socket with a timeout

答案 1 :(得分:2)

除非您将套接字设置为非阻塞或超时模式,否则

recvfrom可能确实会停止(等待数据)。此外,如果套接字被对方关闭,则“套接字已关闭,无需再接收”的指示 <{1}}的值None - 它是一个空字符串data。因此,您可以将测试更改为''以获得更多通用性。

答案 2 :(得分:0)

套接字的阻止模式是什么?

如果您处于阻止模式(我认为是默认模式),您的程序将停止直到数据可用...然后您将不会到达recv()之后的下一行,直到数据到来。

但是,如果你切换到非阻塞模式(参见socket.setblocking(flag)),我认为它会引发一个你必须捕获的异常而不是空检查。

答案 3 :(得分:0)

如果在指定的时间段后没有返回数据,您可能希望将socket.setdefaulttimeout(n)设置为退出循环。