跨平台(windows+linux)的线程辅助程序,跨平台(Windows+Linux)的Socket通讯程序(二)—结构...
上一篇"跨平臺(Windows+Linux)的Socket通訊程序"給出了Socket通訊底層的一些函數的包裝方法/類,同時屏蔽了操作系統(Windows/Linux)的不同。
上一篇只是對通訊底層方法的封裝,并沒用涉及應用,這一篇將基于上一篇,并結合"跨平臺(Windows+Linux)的線程輔助程序",討論一個實用化的Socket通訊程序的體系結構。
一、結構圖
下面給出了一個Socket通訊應用的大致體系結構圖。
圖中,給出了一些概念類和它們所處的層次,大致上,分為三個處理層次以及一個輔助層次。
底層封裝函數:這個層次的內容在(一)中已論述,主要是對Socket原生函數的封裝,之所以既有CSocketWrap類,又有獨立的輔助函數,是考慮到一般性與特殊性兼顧,對通常的通訊邏輯,可在CSocketWrap類中處理,對特殊的要求,可直接調用底層的封裝函數。
通用的Server和Client層:因為Server端與Client端通訊邏輯不同,宜采用兩個類分別處理,本文沒有將UDP與TCP協議分開,如果邏輯要更清晰一些,也可以寫成4個類。
以上兩層都未涉及業務邏輯,完成的是通用的通訊功能,發送或接收函數“看到”的是“數據流”或“數據包”,而忽視其意義。最核心的功能函數有3個:發送函數、接收函數、通訊失敗判斷函數,通常情況下,發送、接收函數都是采用非阻塞方式,通訊失敗函數被更上層的業務邏輯層所調用,有助于判斷是否需要重發、繼續保持連接等業務邏輯。
業務邏輯層:該層完成通訊的業務邏輯,每個應用都會有所不同,這里分了4個類,每個類都將包含一個協議封裝/解析類,用于無意義的“數據流”或“數據包”與有意義的“數據結構”之間的轉換。
協議解析/封裝層:該層實際上不屬于通訊程序本身,是對外通訊協議與對內通訊協議之間的轉換。對外的通訊協議格式與應用內部使用的數據格式通常是不同的,需要兩個類分別進行轉換。
對通訊協議的解析,UDP與TCP一般情況下是不同的(見(一)中UDP與TCP的區別)。對于比較復雜的協議,協議解析/封裝類可能有多個,本文只是示意性的給出一個。關于通訊協議的解析和封裝,這里不做介紹。
二、一些討論
1.數據的發送與接收宜與業務邏輯分開,這樣就可以編寫一個較為通用的發送與接收過程類(業務邏輯一般不能通用),要做到這點,比較合適的做法是采用非阻塞的發送與接收函數,并且將發送與接收過程放到單獨的一個線程中,通過線程間信息共享,與業務線程傳遞要發送與接收的數據。
2.實際上,通用Server/Client層完成的是Socket的“業務”,如果采用多線程,宜在這一層完成,上面的業務層只需調用這一層的發送或接收方法即可。
總結
以上是生活随笔為你收集整理的跨平台(windows+linux)的线程辅助程序,跨平台(Windows+Linux)的Socket通讯程序(二)—结构...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab 计算 工程,matlab工
- 下一篇: layui弹出层html,layui-弹