2

我正在研究 Django Web 应用程序的后端,该应用程序还必须使用 TCP 通信通过 GPRS 与现场的传感器设备进行套接字 I/O。

我已经成功地使用 python 模块从设备获取数据asyncore。我一直在做的是将设备配置为通过 TCP 将数据发送到服务器,然后我会使用asyncore(我选择它是因为它是套接字 i/o 的异步方法)来获取这些传入数据。

文档讨论了重载asyncore.dispatcherorasyncore.dispatcher_with_send以便能够在回调中实现自定义操作,如handle_write,handle_read等。

目前,可以通过方法中的pickup来获取传入的数据handle_read,但是最近出现了一个新的需求:

当设备连接到服务器时,它需要能够保持连接,以便我们可以向它发送一些命令(比如要求它识别自己),然后在发现真实的情况下继续使用它发送的数据。

所以,我handle_write在我的实现中的方法中添加了代码,将“识别你自己”命令发送到与我们连接的设备。但我的问题是,即使设备继续连接并且handle_read显示我可以获得传入数据,这段代码也永远不会执行!

我尝试输入“识别自己”代码(发送一些如下所示的十六进制命令)

print 'Attempting to Identify Remote Party...'
self.send('\x40\x40\x00\x11\x12\x34\x56\xFF\xFF\xFF\xFF\x90\x01\x41\xCF\x0D\x0A')

希望handle_read在我保留之前发送的数据时会收到响应,但这失败了!我能做些什么?

什么是更好/最好的方法来实现这一目标?

4

1 回答 1

0

如果您正在实现一个包含一些命令和一些数据交换的协议,那么最好将 asynchat 库与 asyncore 一起使用。

于 2011-07-07T05:16:20.667 回答