成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

描述C#異步Socket

開發 后端
本文介紹C#異步Socket,具體實現和測試時筆者還發現,在Internet環境下的Socket應用中,需要系統有極強的容錯能力。

幾天前在博問中看到一個C#異步Socket問題,就想到筆者2004年做的一個省級交通流量接收服務器項目,當時的基本求如下:

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

具體實現和測試時筆者還發現,在Internet環境下的Socket應用中,需要系統有極強的容錯能力:沒有辦法控制異常,就必須允許它們存在(附加源代碼中可以看到,try{}catch{}語句較多)。對此,筆者設計了一個專門的檢查和清理線程,完成無效或超時會話的清除和資源釋放工作。

依稀記得,國內框架作者的名稱空間有ibm,認為是IBM公司職員,通過郵件后才知道其人在深圳。筆者向他請教了幾個問題,相互探討了幾個技術關鍵點。可惜,現在再去找,已經查不到原文和郵件了。只好借此機會,將本文獻給這兩個素未謀面的技術高人和同行,也盼望拙文或源碼能給讀者一點有用的啟發和幫助。

1、主要技術思路

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

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

2、主要類簡介

系統主要由3個類組成:

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

3、關鍵函數和代碼

下面簡介核心類TDatagramReceiver的關鍵實現代碼。系統啟動

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

  1. Code  
  2. ///  
  3. ///啟動接收器  
  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#調用Windows API函數
  2. 詳解C#調用Outlook API
  3. C#連接Access、SQL Server數據庫
  4. 介紹C#調用API的問題
  5. C#調用Excel與附加代碼
責任編輯:佚名 來源: 51CTO.com
相關推薦

2009-08-20 16:33:44

Socket異步通訊

2009-08-13 17:04:09

C#語言C#程序

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-26 17:49:36

C# readonly

2009-08-03 18:08:39

C# ICloneab

2009-08-31 18:32:01

C# ListBoxE

2009-08-20 09:30:03

C#開發WinForm

2009-08-19 10:09:21

C#和C++

2009-08-18 16:45:40

C# Raw Sock

2009-08-27 17:14:36

C# Socket

2009-08-17 13:34:02

C#異步操作

2009-09-01 18:25:32

C#結構實例

2009-09-04 11:15:07

選擇C#構造函數

2009-09-04 13:22:31

C#實現多個接口

2009-08-21 17:31:58

C#垃圾回收

2009-08-13 17:58:34

C#存儲過程

2009-09-02 13:01:11

C#多路廣播

2009-09-16 09:01:40

C#多維數組
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 深夜爽视频 | 成人不卡在线 | 日韩成人 | 欧美日韩久久精品 | 中文字幕在线第二页 | 欧美一级特黄aaa大片在线观看 | 色必久久 | 91中文| 久久综合久久自在自线精品自 | 久久国产麻豆 | 浴室洗澡偷拍一区二区 | 色姑娘av| 亚洲国产精品美女 | 欧美日韩精品一区二区三区四区 | 中文在线观看视频 | 午夜视频在线观看一区二区 | 欧美日韩在线成人 | 成人午夜免费福利视频 | 高清国产一区二区 | 久久国品片 | 国产成人jvid在线播放 | 国产日韩精品在线 | 日韩一区二区福利视频 | 欧美xxxx日本 | 国产中的精品av涩差av | 成人影院一区二区三区 | 少妇精品亚洲一区二区成人 | 精品久久香蕉国产线看观看亚洲 | 天天干天天爱天天爽 | 亚洲一区二区三区四区在线观看 | 免费久久视频 | 精品亚洲一区二区三区四区五区 | 国产91丝袜在线播放 | 午夜免费电影 | 日韩国产一区二区三区 | 日韩爱爱网 | 国产精品国产成人国产三级 | 日韩成人在线视频 | av中文在线观看 | 色婷婷av一区二区三区软件 | www.99re|