溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C#中怎么實(shí)現(xiàn)異步Socket

發(fā)布時間:2021-07-07 16:00:27 來源:億速云 閱讀:115 作者:Leah 欄目:編程語言

C#中怎么實(shí)現(xiàn)異步Socket,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

1、主要技術(shù)思路

整個系統(tǒng)由三個核心線程組成,并由.NET線程池統(tǒng)一管理:

偵聽客戶端連接請求線程:ListenClientRequest(),循環(huán)偵聽客戶端連接請求。如果有,檢測該客戶端IP,看是否是同一觀測設(shè)備,然后建立一個客戶端TSession對象,并通過異步Socket調(diào)用方法BeginReceive()接收數(shù)據(jù)包、EndReceive()處理數(shù)據(jù)包 數(shù)據(jù)包處理線程:HandleDatagrams(),循環(huán)檢測數(shù)據(jù)包隊(duì)列_datagramQueue,完成數(shù)據(jù)包解析、判斷類型、存儲等工作 客戶端狀態(tài)檢測線程:CheckClientState(),循環(huán)檢查客戶端會話表_sessionTable,判斷會話對象是否有效,設(shè)置超時會話關(guān)閉標(biāo)志,清楚無效會話對象及釋放其資源。

2、主要類簡介

系統(tǒng)主要由3個類組成:

TDatagramReceiver(數(shù)據(jù)包接收服務(wù)器):系統(tǒng)的核心進(jìn)程類,建立Socket連接、處理與存儲數(shù)據(jù)包、清理系統(tǒng)資源,該類提供全部的public屬性和方法 TSession(客戶端會話):由每個客戶端的Socket對象組成,有自己的數(shù)據(jù)緩沖區(qū),清理線程根據(jù)該對象的最近會話時間判斷是否超時 TDatagram(數(shù)據(jù)包類):判斷數(shù)據(jù)包類別、解析數(shù)據(jù)包

3、關(guān)鍵函數(shù)和代碼

下面簡介核心類TDatagramReceiver的關(guān)鍵實(shí)現(xiàn)代碼。系統(tǒng)啟動

系統(tǒng)啟動方法StartReceiver()首先清理資源、創(chuàng)建數(shù)據(jù)庫連接、初始化若干計(jì)數(shù)值,然后創(chuàng)建服務(wù)器端偵聽Socket對象,***調(diào)用靜態(tài)方法ThreadPool.QueueUserWorkItem()在線程池中創(chuàng)建3個核心處理線程。以上介紹C#異步Socket

Code  ///  ///啟動接收器  ///  publicboolStartReceiver()  {  try  {  _stopReceiver=true;   this.Close();   if(!this.ConnectDatabase())returnfalse;   _clientCount=0;  _datagramQueueCount=0;  _datagramCount=0;  _errorDatagramCount=0;  _exceptionCount=0;   _sessionTable=newHashtable(_maxAllowClientCount);  _datagramQueue=newQueue<TDatagram>(_maxAllowDat)

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI