我想在没有数据的情况下退出循环,但循环似乎停在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...'
答案 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)设置为退出循环。