簡體   English   中英

具有異步或其他Python方式的雙向套接字I / O

[英]Two-way Socket I/O with asyncore or alternative in Python

我正在Django Web應用程序的后端上工作,該應用程序還必須通過GPRS使用TCP通信與現場的傳感器設備進行套接字I / O。

我設法使用python模塊asyncore從設備成功獲取數據。 我一直在做的事情是配置設備以通過TCP將數據發送到服務器,然后我將使用asyncore (由於它是套接字I / O的異步方法而選擇了)來拾取這些傳入的數據。

文檔討論了重載asyncore.dispatcherasyncore.dispatcher_with_send以便能夠在諸如handle_writehandle_read等回調中實現自定義操作。

當前,能夠通過在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響應,但這會失敗! 我能做什么?

什么是最好的/最好的方法來實現這一目標?

如果要實現的協議具有一些命令和一些數據交換,那么最好將asynchat庫與asyncore一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM