2

我通过套接字模块从某些设备接收数据。但一段时间后,设备会停止发送包裹。然后我想中断for循环。虽然 True 不起作用,因为他收到了超过 100 个包裹。我怎样才能停止这个过程?s 代表套接字。

...
for i in range(packages100):
    data = s.recv(4)
    f.write(data)
...

编辑:我认为 socket.settimeout() 是解决方案的一部分。另请参阅: 如何在 python 的 socket recv 方法上设置超时?

4

2 回答 2

3

如果您的对等方真的只是停止发送数据,而不是关闭连接,那么这很棘手,您将不得不求助于从该套接字进行异步读取。

将其置于异步模式(文档和 Google 是您的朋友),并尝试每次读取它,而不是阻塞读取。然后,您可以随时停止“尝试”。请注意,由于异步 IO 的性质,您的代码会有些不同 - 您将不再能够假设一旦recv返回,它实际上会读取一些数据。

于 2011-05-11T12:21:50.570 回答
2
while 1:
    data = conn.recv(4)
    if not data: break
    f.write(data)

此外,python 文档中的示例

于 2011-05-11T12:11:44.270 回答