偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

描述C#異步Socket

開(kāi)發(fā) 后端
本文介紹C#異步Socket,具體實(shí)現(xiàn)和測(cè)試時(shí)筆者還發(fā)現(xiàn),在Internet環(huán)境下的Socket應(yīng)用中,需要系統(tǒng)有極強(qiáng)的容錯(cuò)能力。

幾天前在博問(wèn)中看到一個(gè)C#異步Socket問(wèn)題,就想到筆者2004年做的一個(gè)省級(jí)交通流量接收服務(wù)器項(xiàng)目,當(dāng)時(shí)的基本求如下:

接收自動(dòng)觀(guān)測(cè)設(shè)備通過(guò)無(wú)線(xiàn)網(wǎng)卡、Internet和Socket上報(bào)的交通量數(shù)據(jù)包 全年365*24運(yùn)行的自動(dòng)觀(guān)測(cè)設(shè)備5分鐘上報(bào)一次觀(guān)測(cè)數(shù)據(jù),每筆記錄約2K大小 規(guī)劃全省將有100個(gè)左右的自動(dòng)觀(guān)測(cè)設(shè)備(截止2008年10月還只有30個(gè))
當(dāng)時(shí),VS2003才發(fā)布年多,筆者也是接觸C#不久。于是Google了國(guó)內(nèi)國(guó)外網(wǎng),希望找點(diǎn)應(yīng)用C#解決Socket通信問(wèn)題的思路和代碼。***,找到了兩篇幫助***的文章:一篇是國(guó)人寫(xiě)的Socket接收器框架,應(yīng)用了獨(dú)立的客戶(hù)端Socket會(huì)話(huà)(Session)概念,給筆者提供了一個(gè)接收服務(wù)器的總體框架思路;另一篇是美國(guó)人寫(xiě)的,提出了多線(xiàn)程、分段接收數(shù)據(jù)包的技術(shù)方案,描述了多線(xiàn)程、C#異步Socket的許多實(shí)現(xiàn)細(xì)節(jié),該文堅(jiān)定了筆者采用多線(xiàn)程和處理異步Socket接收器的技術(shù)路線(xiàn)。

具體實(shí)現(xiàn)和測(cè)試時(shí)筆者還發(fā)現(xiàn),在Internet環(huán)境下的Socket應(yīng)用中,需要系統(tǒng)有極強(qiáng)的容錯(cuò)能力:沒(méi)有辦法控制異常,就必須允許它們存在(附加源代碼中可以看到,try{}catch{}語(yǔ)句較多)。對(duì)此,筆者設(shè)計(jì)了一個(gè)專(zhuān)門(mén)的檢查和清理線(xiàn)程,完成無(wú)效或超時(shí)會(huì)話(huà)的清除和資源釋放工作。

依稀記得,國(guó)內(nèi)框架作者的名稱(chēng)空間有ibm,認(rèn)為是IBM公司職員,通過(guò)郵件后才知道其人在深圳。筆者向他請(qǐng)教了幾個(gè)問(wèn)題,相互探討了幾個(gè)技術(shù)關(guān)鍵點(diǎn)??上?,現(xiàn)在再去找,已經(jīng)查不到原文和郵件了。只好借此機(jī)會(huì),將本文獻(xiàn)給這兩個(gè)素未謀面的技術(shù)高人和同行,也盼望拙文或源碼能給讀者一點(diǎn)有用的啟發(fā)和幫助。

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

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

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

2、主要類(lèi)簡(jiǎn)介

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

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

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

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

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

  1. Code  
  2. ///  
  3. ///啟動(dòng)接收器  
  4. ///  
  5. publicboolStartReceiver()  
  6. {  
  7. try  
  8. {  
  9. _stopReceiver=true;  
  10.  
  11. this.Close();  
  12.  
  13. if(!this.ConnectDatabase())returnfalse;  
  14.  
  15. _clientCount=0;  
  16. _datagramQueueCount=0;  
  17. _datagramCount=0;  
  18. _errorDatagramCount=0;  
  19. _exceptionCount=0;  
  20.  
  21. _sessionTable=newHashtable(_maxAllowClientCount);  
  22. _datagramQueue=newQueue<TDatagram>(_maxAllowDat) 

【編輯推薦】

  1. C#調(diào)用Windows API函數(shù)
  2. 詳解C#調(diào)用Outlook API
  3. C#連接Access、SQL Server數(shù)據(jù)庫(kù)
  4. 介紹C#調(diào)用API的問(wèn)題
  5. C#調(diào)用Excel與附加代碼
責(zé)任編輯:佚名 來(lái)源: 51CTO.com
相關(guān)推薦

2009-08-20 16:33:44

Socket異步通訊

2009-08-13 17:04:09

C#語(yǔ)言C#程序

2009-08-20 09:30:03

C#開(kāi)發(fā)WinForm

2009-08-31 18:32:01

C# ListBoxE

2009-08-17 16:32:34

C# Anonymou

2009-08-18 17:41:22

C# ListView

2009-08-31 13:18:09

C# IWebMess

2009-08-03 18:08:39

C# ICloneab

2009-08-26 17:49:36

C# readonly

2009-08-19 10:09:21

C#和C++

2009-08-27 17:14:36

C# Socket

2009-08-18 16:45:40

C# Raw Sock

2009-08-17 13:34:02

C#異步操作

2009-09-01 18:25:32

C#結(jié)構(gòu)實(shí)例

2009-09-04 13:22:31

C#實(shí)現(xiàn)多個(gè)接口

2009-09-07 14:33:02

C# switch語(yǔ)句

2009-09-02 13:01:11

C#多路廣播

2009-08-14 14:38:08

C# DataGrid

2009-08-21 17:31:58

C#垃圾回收

2009-09-04 11:15:07

選擇C#構(gòu)造函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)