999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

燃料電池汽車遠程監控中服務器的設計和實現

2018-11-06 10:57:52許建淼馬天才XuJianmiaoMaTiancai
北京汽車 2018年5期
關鍵詞:功能

許建淼,馬天才 Xu Jianmiao,Ma Tiancai

?

燃料電池汽車遠程監控中服務器的設計和實現

許建淼,馬天才 Xu Jianmiao,Ma Tiancai

(同濟大學 汽車學院,上海 201804)

為滿足燃料電池汽車遠程監控中的車載終端和服務器通信的基本要求,以SocketServer庫為基礎,基于Python語言開發實現了服務器和車載終端的多線程非堵塞通信;并在此基礎上加入密碼驗證和IP黑名單,滿足了服務器的基本安全需要;加入超時連接處理功能進行了性能優化;利用Threading庫設計了車載終端管理臺,實現了服務器對車載終端的主動控制。

非堵塞多線程通信;安全通信;車載終端管理臺;汽車遠程車載監控

0 引 言

我國燃料電池汽車正處于商業化示范運行考核與應用階段[1]。為實現“十三五”規劃中提出的“燃料電池汽車要產業化,到2020年要實現燃料電池車批量生產和規模化示范應用”的目標,國家近幾年大力扶持相關企業。為了規范市場,國家新能源補貼政策里明確規定燃料電池汽車的在線遠程監控是強制必要的。因此,如何實現燃料電池汽車的遠程監控是實現燃料電池汽車市場化的主要問題之一。

物聯網可將虛擬世界與物理世界結合,通過數字信息可以控制物理世界關鍵設備甚至基礎設備[2]。安全問題在新興物聯網中并未得到廣泛關注,但特別重要,這在燃料電池汽車的遠程監控中更為突出。所以,在此不拘于實現通信功能,也考慮加入安全功能完善監控體系。

Python是一門高級編程語言,SocketServer庫是Python中基于Socket庫的擴展庫。Socket是TCP/IP協議的基本封裝接口。汽車車載終端考慮到硬件成本和自身的空間大小,系統一般都比較精簡,只支持一些底層網絡服務。因此,Python中SocketServer庫特別適合車載終端和服務器通信的程序開發,所以以此為基礎開發Socket服務器。

1 總體構架

總體架構分為本地端和服務器端。本地端是車載終端;服務器端為非堵塞多線程通信和安全通信的Socket服務器和車載終端管理器。非堵塞多線程通信和安全通信的Socket服務器可以滿足多臺車載終端即時向服務器進行數據傳輸,服務器接收到數據后,會對車載終端回發應答,通信過程中有IP黑名單和密碼驗證兩種安全手段,在一定程度上保障服務器的安全性;在服務器上管理員可以主動選擇車載終端建立連接,對選定的車載終端發送指令進行遠程控制,便于管理員應對車載終端的一系列意外情況,保證車載終端和服務器的通信穩定和安全。具體如圖1所示。

圖1 總體構架圖

2 Socket服務器的設計和實現

Socket服務器主要有兩種功能:非堵塞多線程通信功能和安全通信功能。分別介紹兩種功能的具體設計和實現。

2.1 非堵塞多線程通信功能的設計和實現

2.1.1 非堵塞式通信功能

應用進程在調用接收函數接收報文時,在阻塞模式下,若沒有到達的數據,則調用將一直阻塞直到有數據到達或出錯;而在非阻塞模式下,將直接返回而不需等待。因此,非堵塞式通信相較于堵塞式通信,可以充分利用服務器的資源快速處理各個車載終端的連接,提高通信效率。

Python中Select庫是對底層操作系統的直接訪問的接口,可以監控sockets、files和pipes,等待IO完成,當有可讀、可寫或者異常事件產生時,可以做出響應。所以,使用Select庫監聽sockets,可以較容易地實現非堵塞通信。

with _ServerSelector() as selector:

selector.register(self,selectors.EVENT_ READ)

while not self._shutdown_request:

ready = selector.select(poll_interval)

if ready:

self._handle_request_noblock()

其中,poll_interval為select循環執行時間,程序中poll_interval=0.5,即每0.5 s對sockets進行一次監聽,其他時間釋放資源。當有車載終端接觸服務器,select在下一個0.5 s后執行時監聽到數據,立即響應執行下一步操作即執行self._handle_request_noblock函數。由此實現非堵塞式通信。

2.1.2 多線程通信功能

線程是系統分配處理器時間的基本單元,一個進程中可以有多個線程同時執行代碼,實際上,同一時間只有一個線程在運行,處理器通過分時在各個線程間頻繁切換,因為時間間隔很短,所以感覺是多線程同時進行。多線程有利于充分利用服務器的資源。

考慮到服務器的服務對象車載終端有多臺,設計多線程通信符合項目的實際需求。多線程實現是依靠SocketServer庫中的ThreadingMixIn類(如下代碼),對BaseServer中的process_request進行重寫,在其中引入Threading庫,將每一個process_request都獨立成一個單獨的線程,并在程序后端RequestHandlerClass的handle函數內采用while循環,將通過驗證的合法車載終端的連接線程保留下來,從而實現多線程通信功能。

class ThreadingMixIn

def process_request(self,request,client_ address):

t=threading.Thread(target=self.process_request_thread,args=(request,client_address))

t.daemon=self.daemon_threads

t.start()

2.1.3 整體功能

1)SocketServer庫的機理說明。

實現最基礎通信的核心在于SocketServer中的BaseServer,它需要2個實參server_ip和RequestHandlerClass。server_ip為本服務器的地址和開放端口;RequestHandlerClass為車載終端接觸服務器后的主要處理方法集。BaseServer有兩大方法:handler_request和server_forever。在此采用server_forever,其中包含select函數,實現了非堵塞連接。當車載終端與服務器接觸時,select會立即做出響應,調用_handle_request_noblock函數。在_handle_request_noblock函數中起主要作用的是verify_request和finish_request方法,前者在安全通信中用于安全驗證,后者調用RequestHand- lerClass,執行開發者設計的一系列操作。finish_ request執行完成后調用shutdown_ request退出,至此整個流程完成。具體程序運行流程如圖2所示,從左至右為代碼的層次結構,從上到下為代碼的執行前后。

因為要求即時通信,同時具有一定的可靠性,不允許數據傳輸中丟包,對數據的順序也有要求,所以采用SocketServer庫中的TCPServer。TCPServer類是對BaseServer的繼承,定義了Socket的地址簇、套接字類型和協議,并且提供了get_request方法(在BaseServer中_handle_ request_noblock中必須調用的方法),對Base Server在TCP中的運用進行了完善,滿足TCP通信要求。

圖2 程序流程圖

2)SocketServer庫的實現過程。

SocketServer庫中提供給用戶BaseReques- tHandler方法,用于方便編寫BaseServer所需的RequestHandlerClass實參。在此首先創建Threaded TCPRequestHandler類繼承SocketServer.BaseRequest Handler,并對其中setup,handle,finish函數進行重寫。setup是開始階段服務器對嘗試連接的車載終端進行地址解析,并設置套接字的超時值。handle是BaseRequestHandler內的核心代碼,主要包括服務器處理車載終端的連接的一系列行為,對嘗試連接的車載終端進行密碼驗證;未通過密碼驗證則主動斷開客戶端的連接,通過密碼驗證后服務器保留此線程,并接受車載終端傳來的數據并存入數據庫;服務器對超時未響應的車載終端采取主動斷開連接;服務器對車載終端發出的指令采取相應的響應(接收到車載終端發出exit后,服務器主動斷開與之連接,釋放出此線程資源)。finish是結束階段服務器與車載終端斷開連接后的相應行為。

接下來采用ThreadedTCPServer類對Socket Server. TCPServer和ThreadingMixIn進行繼承,具體代碼如下。其中重寫了verify_request函數,即根據IP黑名單過濾掉非法IP,不允許其與服務器嘗試連接,保障服務器的安全(具體介紹在2.2安全通信功能的設計和實現)。

最后在主程序中將本服務器的IP地址、開放端口號和ThreadedTCPRequestHandler代入ThreadedTCPServer完成配置,然后再使用ThreadedTCPServer. server_forever既可(具體參照如下代碼前兩行)。至此基本上完成了非堵塞多線程通信的整體 功能。

class ThreadedTCPServer(SocketServer. Threading MixIn,SocketServer.TCPServer):

def verify_request(self,request,client_ address):

client_ip = client_address[0]

if client_ip in illegal_ip:

print(client_ip+"為非法IP無法連接服務器")

return False

else:

return True

2.2 安全通信功能的設計和實現

安全通信功能主要依靠密碼驗證和IP黑名單,兩者相輔相成,共同實現服務器的通信安全,如圖3所示。

圖3 安全通信實現簡圖

2.2.1 IP黑名單

IP黑名單為第1層前端驗證。具體作用是將密碼驗證中出現5次以上錯誤的IP放置于IP黑名單,禁止此IP在一定時間內連接服務器,有效地防止不法人員對服務器進行暴力猜解攻擊,在一定程度上保障服務器的安全。具體實現在verify_request函數中,對BaseServer類中的verify_request函數進行重寫(具體參照上段代碼),對illegal_ip中的IP驗證過濾,拒絕和非法車載終端連接。此函數在_handle_request_noblock中起作用,即車載終端和服務器一開始接觸時執行。

2.2.2 密碼驗證

密碼驗證為第2層后端驗證。在handle函數中首先判斷接入IP是否在legal_ip列表,如果在,車載終端和服務器成功建立連接,如果不在,調用add_illegal_ip函數進行驗證。在此函數中進行密碼驗證:車載終端傳入服務器的第1波數據被要求必須上傳規定格式的賬號密碼,然后此數據被引入check_ip函數中進行驗證,check_ip會對比數據庫中用戶原登記的數據,對傳入的賬號密碼驗證正誤。通過驗證的車載終端IP加入legal_ip列表中,成為合法用戶,服務器將和它建立并保持連接,而未通過驗證的車載終端,服務器會主動和它斷開連接,并且該IP會被記錄在error_ip字典中,此字典記錄了錯誤的IP和錯誤次數,當驗證錯誤次數達到5次時,該IP會被加入到illegal_ip中,即IP黑名單,illegal_ip會在前端的verify_request中被調用查詢。

3 車載終端管理臺的設計和實現

車載終端管理臺的設計思路是把非堵塞多線程通信和安全通信通過Threading庫集成在一個線程中,并將服務器對車載終端的主動控制代碼作為一個線程獨立開,以此作為主線程(代碼如下)。其本質是主動對已經建立連接的多個socket的選擇,從而實現與車載終端有區別的雙向通信。具體操作為在管理臺上主動選擇想要控制的車載終端的端口號,然后輸入想要發送的指令,最后發送此指令到選定的車載終端中。至此,已經實現了服務器與車載終端非堵塞多線程通信、安全通信和主動管理車載終端等一系列功能。

server = ThreadedTCPServer((HOST,PORT),Threaded TCPRequestHandler)

server_thread = threading.Thread(target=server. server_forever)

server_thread.daemon = True

server_thread.start()

while True:

time.sleep(2)

want_port=input('請輸入您想要建立連接的端口號:')

if want_port in client_port:

inp=input('想要發送的指令是:')

message=inp.encode(encoding="utf-8")

client_socket[client_port.index(want_port)].sendall(message)

else:

print(want_port+'端口無車載終端連接')

4 其他優化功能的設計和實現

為了使服務器資源合理分配,設置了超時連接處理,避免服務器為長時間未響應的車載終端消耗資源。功能的實現主要基于套接字的內置方法settimeout,即先于BaseRequestHandler的setup函數內調用self.request的settimeout,并代入設置好的timeout,最后在handle函數中調用如下代碼,從而實現這一功能。

try:

data = self.request.recv(1024)

except socket.timeout:

print(' '+self.ip+":"+str(self.port)+"接收超時,即將斷開連接")

break

5 驗證測試

為了驗證服務器功能的可行性和穩定性,搭建測試環境并進行實際測試,車載終端采用STM32主控芯片,通過SIM7100C 4G芯片實現數據的采集和發送;服務器是騰訊云服務器。通過一定時間的跟蹤測試發現,開發的服務器性能穩定,并且基本滿足了燃料電池汽車在線遠程監控的所需功能。

以下為各個測試的效果。

1)Socket服務器的驗證。

(1)安全通信測試

車載終端發送錯誤密碼后服務器的反應為

('58.41.201.173',17360)嘗試連接中

58.41.201.173非法連接次數:1

58.41.201.173:17360已斷開連接!

車載終端發送錯誤密碼5次后服務器的反 應為

('58.41.201.173',17365)嘗試連接中

58.41.201.173非法連接次數:5

58.41.201.173:17365已斷開連接!

58.41.201.173為非法IP無法連接服務器

車載終端發送正確密碼后服務器的反應為

('58.41.201.173',17379)嘗試連接中

legal_IP['58.41.201.173']

('58.41.201.173',17379)已經成功連接

(2)非堵塞多線程通信功能的驗證

單臺車載終端向服務器發送消息時服務器的反應為

('58.41.201.173',17379)已經成功連接

從17379接收到的信息是:tongji

從17379接收到的信息是:automobile

多臺車載終端向服務器發送消息時服務器的反應為

('180.160.22.100',1143)嘗試連接中

legal_IP['180.160.22.100']

('180.160.22.100',1143)已經成功連接

('222.66.186.53',33812)嘗試連接中

legal_IP['180.160.22.100','222.66.186.53']

('222.66.186.53',33812)已經成功連接

從33812接收到的信息是:tongji

從1143接收到的信息是:automobile

從1143接收到的信息是:tongji

從33812接收到的信息是:automobile

2)車載終端管理臺的驗證。

服務器端的操作為

請輸入您想要建立連接的端口號:18210

想要發送的指令是:shutdown

車載終端接收的消息為

從服務器接收到的指令:b'shutdown'

本次是通過車載終端將其從服務器接收到的信息再發回到服務器上顯示從而驗證了測試。

3)超時處理功能的驗證。

超過預定時間,服務器與車載終端主動斷開連接為

('58.41.201.173',18241)嘗試連接中

legal_IP['58.41.201.173']

('58.41.201.173', 18241)已經成功連接

58.41.201.173:18241接收超時,即將斷開連接

58.41.201.173:18241已斷開連接!

6 結束語

1)基于Python中的SocketServer庫開發了一個非堵塞多線程的Socket服務器,詳細地介紹了設計和實現過程,主要核心點有BaseServer類、server_forever函數、select庫、BaseRequestHandle類,可以滿足汽車遠程車載監控項目中多臺汽車車載終端和服務器數據傳輸的基本功能。

2)將互聯網中經典的密碼驗證和IP黑名單等安全手段運用到燃料電池汽車遠程監控中,對其設計和實現過程進行了詳細的介紹,主要核心點有verify_request函數和check_ip函數,在一定程度上保障了服務器的通信安全。這為以后基于SocketServer的物聯網安全研究提供了參考。

3)車載終端管理臺的初步實現,使用了Threading進行線程管理,獨立出一個線程進行socket有選擇地雙向連接,從而簡單有效地實現需要的功能,經過測試,初步滿足項目功能,有待進一步完善。

4)為了驗證服務器功能,搭建了真實測試環境進行跟蹤測試,證明服務器功能的穩定性和可靠性。

[1]《中國公路學報》編輯部. 中國汽車工程學術研究綜述·2017[J]. 中國公路學報,2017,30(6):1-197.

[2]武傳坤. 中國的物聯網安全:技術發展與政策建議[J]. 人民論壇·學術前沿,2016(17):47-58.

2018-06-19

1002-4581(2018)05-0001-05

U469.7

A

10.14175/j.issn.1002-4581.2018.05.001

猜你喜歡
功能
拆解復雜功能
鐘表(2023年5期)2023-10-27 04:20:44
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
基層弄虛作假的“新功能取向”
當代陜西(2021年21期)2022-01-19 02:00:26
深刻理解功能關系
鉗把功能創新實踐應用
關于非首都功能疏解的幾點思考
基于PMC窗口功能實現設備同步刷刀功能
懷孕了,凝血功能怎么變?
媽媽寶寶(2017年2期)2017-02-21 01:21:24
“簡直”和“幾乎”的表達功能
中西醫結合治療甲狀腺功能亢進癥31例
主站蜘蛛池模板: 国产成人艳妇AA视频在线| 97久久精品人人做人人爽| 伊人久久大香线蕉aⅴ色| 狠狠色噜噜狠狠狠狠色综合久| 久久婷婷五月综合97色| 日韩色图在线观看| 日本精品影院| 成人免费一级片| 性激烈欧美三级在线播放| 无码中文字幕精品推荐| 亚洲第一成人在线| 国产成人亚洲无码淙合青草| 毛片大全免费观看| 四虎永久在线| 午夜日b视频| 美女一级毛片无遮挡内谢| 国产欧美日韩资源在线观看| 国产网友愉拍精品| 亚洲无码精彩视频在线观看| 亚洲人成亚洲精品| 亚洲国产中文欧美在线人成大黄瓜 | 老司国产精品视频| 97在线国产视频| 欧美自慰一级看片免费| 国产网站在线看| 在线观看精品国产入口| 国产日韩欧美中文| 国产精品福利在线观看无码卡| 91亚洲视频下载| 午夜丁香婷婷| 亚洲成人精品在线| 欧美精品亚洲日韩a| 久久精品国产91久久综合麻豆自制| 国内精品九九久久久精品| 亚洲床戏一区| 午夜一级做a爰片久久毛片| 99热国产在线精品99| 亚洲人成人无码www| 亚洲成人在线免费观看| 亚洲av片在线免费观看| 国产成人免费观看在线视频| 内射人妻无码色AV天堂| 国产呦视频免费视频在线观看| 国产麻豆另类AV| 日韩毛片免费视频| 玖玖免费视频在线观看| 久久久久亚洲精品成人网| 91青青视频| 亚洲色无码专线精品观看| 亚洲成人一区在线| 欧美高清日韩| 99久久免费精品特色大片| 热久久国产| 2020精品极品国产色在线观看 | 国产在线拍偷自揄观看视频网站| 国产精品无码影视久久久久久久| 国产99视频在线| 宅男噜噜噜66国产在线观看| 久久黄色毛片| 一本大道AV人久久综合| 一区二区三区国产精品视频| 中美日韩在线网免费毛片视频 | 久久a毛片| 成人一级免费视频| 国产精品无码作爱| 欧美色视频网站| 色综合天天娱乐综合网| 国产传媒一区二区三区四区五区| www.国产福利| 国产真实乱子伦精品视手机观看| 在线观看视频一区二区| 久草视频一区| 四虎影视国产精品| 美女被操91视频| 日本午夜三级| 亚洲国产看片基地久久1024| 91精品日韩人妻无码久久| 欧美精品一区在线看| 欧美亚洲另类在线观看| 欧美伊人色综合久久天天| 国产精品网址在线观看你懂的| 成人av专区精品无码国产|