我在python程序中使用Twisted。我每分钟发送数据,在UDP套接字上接收数据,我需要设置一个超时。在
我找到了一个办法,但我想知道这是不是一个好办法。在
我的代码是这样的:
class UDPSocket(DatagramProtocol):
def startProtocol(self):
self.transport.connect(self.HOST, self.PORT)
reactor.callLater(1, self.send_data)
def send_data(self):
reactor.callLater(60, self.send_data)
self.transport.write("Some data")
self.timeoutCallId = reactor.callLater(5, raise_timeout)
def datagramReceived(self, data, (host, port)):
if self.timeoutCallId.active():
self.timeoutCallId.cancel()
#Do something with data
def raise_timeout(self):
#Do something to manage timeout
reactor.listenUDP(port, UDPSocket())
reactor.run()
谢谢你的建议
编辑:
它有效,但我有个问题。在
如果发生超时,我将正确地进入raise_timeout函数,但是当下一个“send_data()”被调用时自传输写入(“data”)函数引发异常: “NoneType”对象没有属性“write”。在
我想是吧自行运输已断开连接。在
我该怎么解决呢?在
我找到了解决办法。在
当我们使用UDP时,当我们发送数据报时,如果在不到1秒后没有收到应答,”自行运输“”设置为“无”,并调用“stopProtocol”方法。一旦我们离开“stopProtocol”方法,reactor将停止侦听指定的UDP端口。在
这是我的解决方案代码:
相关问题 更多 >
编程相关推荐