雖然在APP應用、Web應用、Winform應用等大趨勢下,越來越多的企業趨向於這些應用系統開發,但是Socket的應用在某些場合是很必要的,如一些停車場終端設備的接入,農業或者水利、壓力監測方面的設備數據采集等,以及常見的IM(即時通訊,如騰訊QQ、阿裡旺旺等)的客戶端,都可以采用Socket框架進行相關的數據采集和信息通訊用途的,Socket應用可以做為APP應用、Web應用和Winform應用的補充。
一般情況下,客戶端和服務端進行Socket連接,需要進行數據的交換,也就是後台提供數據查詢或者寫入的相關操作,它們的應用場景也是在後台有一個應用數據庫支持的,如下所示。
Socket服務器和客戶端的通訊原理如下所示,客戶端通過服務器地址和端口發起Socket連接,服務器在接收到Socket客戶端的請求後,開辟一個新的Socket連接進行通訊管理,兩方基於Socket協議進行數據的交互處理。
Socket開發是屬於通信底層的開發,.NET本身也提供了非常豐富的類來實現Socket的開發工作,Socket框架應針對這些基礎功能進行了很好的封裝處理,已達到統一、高效的使用。
要掌握或者了解Socket開發,必須了解下面所述的場景及知識。
針對以上內容,可以封裝以下功能的操作類作為共用基類:
1)Socket客戶端基類
我們知道Socket通訊,分為了客戶端和服務端,它們各自處理的事情是有所不同的,因此為了實現更好的代碼重用,我們在這個基礎上進行了不同的封裝。針對Socket客戶端類,我們主要需要提供基礎的Socket連接及斷開、接收及發送、封包拆包等常規操作過程,因此我們封裝了一個客戶端基類 BaseSocketClient。
但是為了基於不同的應用客戶端,實現不同的業務溝通,我們可以在服務端接收處理不同的客戶端,因此也就是需要對Socket客戶端進行派生擴展,例如本框架增加了一個中心的Socket客戶端、分店的Socket客戶端、還有一個橋接的連接客戶端(可實現轉發數據功能)。
相對於Socket客戶端基類,同樣我們也創建一個Socket服務端基類,通過繼承的方式,我們可以用於簡化代碼的重復性。該服務端基類稱為TCP服務器管理基類 BaseSocketServer,負責在獨立的線程中偵聽指定的端口,如果有客戶端連接進來,則進行相應的處理。