我通过socket-module从某些设备接收数据。 但过了一段时间后,设备停止发送包裹。 然后我想中断for循环。 虽然True不起作用,因为他收到了超过100个包裹。 我怎么能停止这个过程? s代表插座。
...
for i in range(packages100):
data = s.recv(4)
f.write(data)
...
编辑: 我认为socket.settimeout()是解决方案的一部分。也可以看看: How to set timeout on python's socket recv method?
答案 0 :(得分:3)
如果你的对等方真的只是停止发送数据,而不是关闭连接,这很棘手,你将被迫从这个套接字中寻求异步读取。
将其置于异步模式(文档和Google是您的朋友),并尝试每次都读取它,而不是阻止读取。然后,您可以随时停止“尝试”。请注意,根据异步IO的性质,您的代码会有所不同 - 您将无法再假设一旦recv
返回,它实际上会读取一些数据。
答案 1 :(得分:2)
while 1:
data = conn.recv(4)
if not data: break
f.write(data)