Python:停止套接字接收进程

2 投票
2 回答
3110 浏览
提问于 2025-04-16 17:26

我通过socket模块从某个设备接收数据。但是过了一段时间后,设备停止发送数据包。然后我想中断这个循环。用无限循环(while True)不行,因为它接收了超过100个数据包。我该怎么停止这个过程呢?这里的s代表socket。

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

编辑:我觉得socket.settimeout()可能是解决方案的一部分。你可以看看这个链接:如何在Python的socket接收方法上设置超时?

2 个回答

2
while 1:
    data = conn.recv(4)
    if not data: break
    f.write(data)

另外,这是Python文档中的一个例子

3

如果你的对方真的只是停止发送数据,而不是关闭连接,这就比较棘手了,你需要使用异步读取这个套接字。

把它设置成异步模式(可以查查文档和谷歌,那里有很多帮助),然后每次尝试读取,而不是使用阻塞读取。这样你可以随时停止“尝试”。需要注意的是,由于异步输入输出的特性,你的代码会有些不同——你不能再假设每次recv返回时,实际上都读取到了数据。

撰写回答