Python:停止套接字接收进程
我通过套接字模块从某个设备接收数据。 但过了一段时间后,设备停止发送软件包。 然后我想插入for循环。 虽然True不起作用,因为他收到了超过100个包裹。 我该如何阻止这个过程? s表示插座。Python:停止套接字接收进程
...
for i in range(packages100):
data = s.recv(4)
f.write(data)
...
编辑: 我认为socket.settimeout()是解决方案的一部分。另请参见: How to set timeout on python's socket recv method?
while 1:
data = conn.recv(4)
if not data: break
f.write(data)
只有当对方关闭连接时才有效 – 2011-05-11 12:20:52
啊,我明白了。所以“设备停止发送软件包”并不等同于关闭软件。 – bpgergo 2011-05-11 12:23:46
嗯,也许也许不是,我不能确定OP的含义。我只是想指出区别 – 2011-05-11 12:24:35
如果你的同行真的只是停止发送数据,而不是关闭连接,这是棘手的,你会被迫采取从异步读取这个插座。
将它置于异步模式(文档和Google是你的朋友),并尝试每次阅读它,而不是阻塞阅读。然后,您可以随时停止“试用”,随时随地希望。请注意,通过异步IO的本质,您的代码将有所不同 - 您将不再能够假设一旦recv
返回,它实际上会读取一些数据。
是不是有办法找出客户端要收回多少包? – bpgergo 2011-05-11 12:24:58
停止进程不是问题。问题在于决定何时这样做。什么是标准? – Kylotan 2011-05-11 13:34:24
我想在一秒钟后停止该过程而不接收数据。 – kame 2011-05-11 13:48:41