精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C# Socket通信三大問題詳解

開發 后端
C# Socket通信三大問題是什么呢?C# Socket通信三大問題的具體內容是什么呢?各自的特點是什么呢?那么本文就向你詳細介紹C# Socket通信三大問題。

C# Socket通信三大問題是什么呢?讓我們開始講述:

C# Socket通信三大問題之數據包界限符問題。

根據原項目中交通部標準,在連續觀測站中數據包中,使用﹤﹥兩個字符表示有效數據包開始和結束。實際項目有各自的具體技術規范

C# Socket通信三大問題之數據包不連續問題。

在TCP/IP等通信中,由于時延等原因,一個數據包被Socket做兩次或多次接收,此時在接收第一個包后,必須保存到TSession的DatagramBuffer中,在以后一并處理

C# Socket通信三大問題包并發與重疊問題。

由于客戶端發送過快或設備故障等原因,一次接收到一個半、兩個或多個包文。此時,也需要處理、一個半、兩個或多個包

先補充異步BeginReceive()回調函數EndReceiveData()中的數據包分合函數ResolveBuffer()。

下面是C# Socket通信三大問題的實例演示:

  1. /// ﹤summary﹥  
  2. /// 1) 報文界限字符為﹤﹥,其它為合法字符,   
  3. /// 2) 按報文頭、界限標志抽取報文,可能合并包文  
  4. /// 3) 如果一次收完數據,此時 DatagramBuffer 為空  
  5. /// 4) 否則轉存到包文緩沖區 session.DatagramBuffer  
  6. /// ﹤/summary﹥  
  7. private void ResolveBuffer(TSession session, int receivedSize)  
  8. {  
  9. // 上次留下的報文緩沖區非空(注意:必然含有開始字符 ﹤,空時不含 ﹤)  
  10. bool hasBeginChar = (session.DatagramBufferLength ﹥ 0);   
  11.  
  12. int packPos = 0;  // ReceiveBuffer 緩沖區中包的開始位置  
  13. int packLen = 0;  // 已經解析的接收緩沖區大小  
  14.  
  15. byte dataByte = 0;  // 緩沖區字節  
  16. int subIndex = 0;   // 緩沖區下標  
  17.  
  18. while (subIndex ﹤ receivedSize)  
  19. {  
  20.    // 接收緩沖區數據,要與報文緩沖區 session.DatagramBuffer 同時考慮  
  21.    dataByte = session.ReceiveBuffer[subIndex];  
  22.      
  23.    if (dataByte == TDatagram.BeginChar) // 是數據包的開始字符﹤,則前面的包文均要放棄  
  24.    {  
  25.   // ﹤前面有非空串(包括報文緩沖區),則前面是錯包文,防止 AAA﹤A,1,A﹥ 兩個報文一次讀現象  
  26.   if (packLen ﹥ 0)    
  27.   {  
  28.  Interlocked.Increment(ref _datagramCount);  // 前面有非空字符  
  29.  Interlocked.Increment(ref _errorDatagramCount);  // 一個錯誤包  
  30.  this.OnDatagramError();  
  31.   }  
  32.   session.ClearDatagramBuffer();  // 清空會話緩沖區,開始一個新包  
  33.  
  34.   packPos = subIndex;   // 新包起點,即﹤所在位置  
  35.   packLen = 1;// 新包的長度(即﹤)  
  36.   hasBeginChar = true;  // 新包有開始字符  
  37.    }     
  38.    else if (dataByte == TDatagram.EndChar)  // 數據包的結束字符 ﹥  
  39.    {  
  40.   if (hasBeginChar)  // 兩個緩沖區中有開始字符﹤  
  41.   {  
  42.  ++packLen;  // 長度包括結束字符﹥  
  43.  
  44.  // ﹥前面的為正確格式的包,則分析該包,并準備加入包隊列  
  45.  AnalyzeOneDatagram(session, packPos, packLen);  
  46.  
  47.  packPos = subIndex + 1;  // 新包起點。注意:subIndex 在循環最后處 + 1  
  48.  packLen = 0;   // 新包長度  
  49.   }  
  50.   else  // ﹥前面沒有開始字符,則認為結束字符﹥為一般字符,待后續的錯誤包處理  
  51.   {  
  52.  ++packLen;  //  hasBeginChar = false;  
  53.   }  
  54.    }  
  55.    else  // 非界限字符﹤﹥,就是是一般字符,長度 + 1,待解析包處理  
  56.    {  
  57.   ++packLen;  
  58.    }  
  59.    ++subIndex;  // 增加下標號  
  60. }  // end while  
  61.  
  62. if (packLen ﹥ 0)  // 剩下的待處理串,分兩種情況  
  63. {  
  64.    // 剩下包文,已經包含首字符且不超長,轉存到包文緩沖區中,待下次處理  
  65.    if (hasBeginChar && packLen + 
  66. session.DatagramBufferLength ﹤= _maxDatagramSize)  
  67.    {  
  68.   session.CopyToDatagramBuffer(packPos, packLen);  
  69.    }  
  70.    else  // 不含首字符,或超長  
  71.    {  
  72.   Interlocked.Increment(ref _datagramCount);  
  73.   Interlocked.Increment(ref _errorDatagramCount);  
  74.  
  75.   this.OnDatagramError();  
  76.   session.ClearDatagramBuffer();  // 丟棄全部數據  
  77.    }  
  78. }  
  79. }  

C# Socket通信三大問題之分析包文AnalyzeOneDatagram()函數代碼補充如下:

  1. /// ﹤summary﹥  
  2. /// 具有﹤﹥格式的數據包加入到隊列中  
  3. /// ﹤/summary﹥  
  4. private void AnalyzeOneDatagram(  
  5. TSession session, int packPos, int packLen)  
  6. {  
  7. if (packLen + session.DatagramBufferLength ﹥ _maxDatagramSize)    
  8. // 超過長度限制  
  9. {  
  10.    Interlocked.Increment(ref _datagramCount);  
  11.    Interlocked.Increment(ref _errorDatagramCount);  
  12.    this.OnDatagramError();  
  13. }  
  14. else // 一個首尾字符相符的包,此時需要判斷其類型  
  15. {  
  16.    Interlocked.Increment(ref _datagramCount);  
  17.    TDatagram datagram = new TDatagram();  
  18.  
  19.    if (!datagram.CheckDatagramKind())    
  20. // 包格式錯誤(只能是短期BG、或長期SG包)  
  21.    {  
  22.   Interlocked.Increment(ref _datagramCount);  
  23.   Interlocked.Increment(ref _errorDatagramCount);  
  24.   this.OnDatagramError();  
  25.   datagram = null;  // 丟棄當前包  
  26.    }  
  27.    else  // 實時包、定期包,先解析數據,判斷正誤,并發回確認包  
  28.    {  
  29.   datagram.ResolveDatagram();  
  30.   if (true)  // 正確的包才入包隊列  
  31.   {  
  32.  Interlocked.Increment(ref _datagramQueueCount);  
  33.  lock (_datagramQueue)  
  34.  {  
  35. _datagramQueue.Enqueue(datagram);  // 數據包入隊列  
  36.  }  
  37.   }  
  38.   else 
  39.   {  
  40.  Interlocked.Increment(ref _errorDatagramCount);  
  41.  this.OnDatagramError();  
  42.   }  
  43.    }  
  44. }  
  45. session.ClearDatagramBuffer();  // 清包文緩沖區  

C# Socket通信三大問題之TSession的拷貝轉存數據包文的方法CopyToDatagramBuffer()代碼如下:

  1. /// ﹤summary﹥  
  2. /// 拷貝接收緩沖區的數據到數據緩沖區(即多次讀一個包文)  
  3. /// ﹤/summary﹥  
  4. public void CopyToDatagramBuffer(int startPos, int packLen)    
  5. {  
  6. int datagramLen = 0;  
  7. if (DatagramBuffer != null) datagramLen =   
  8. DatagramBuffer.Length;  
  9.  
  10. // 調整長度(DataBuffer 為 null 不會出錯)  
  11. Array.Resize(ref DatagramBuffer,   
  12. datagramLen + packLen);  
  13.  
  14. // 拷貝到數據就緩沖區  
  15. Array.Copy(ReceiveBuffer, startPos,   
  16. DatagramBuffer, datagramLen, packLen);  
  17. }  

代碼中注釋比較詳細了,下面指出C# Socket通信三大問題實例開發思路:

使用TSession會話對象的字節數組ReceiveBuffer保存BeginReceiver()接收到的數據,使用字節數組DatagramBuffer保存一次接收后分解或合并的剩下的包文。本項目中,由于是5分鐘一個包,正常情況下不需要用到DatagramBuffer數組

處理ReceiveBuffer中的字節數據包時,先考慮DatagramBuffer是否有開始字符﹤。如果有,則當前包文是前個包文的補充,否則前個包文是錯誤的。正確的包文可能存在于兩個緩沖區中,見分析函數AnalyzeOneDatagram()

分析完接收數據包后,剩下的轉存到DatagramBuffer中,見函數CopyToDatagramBuffer()

設計時考慮的另一個重要問題就是處理速度。如果自動觀測站達到100個,此時5*60=300秒鐘就有100個包,即每3秒種一個包,不存在處理速度慢問題。但是,真正耗時的是判斷包是否重復!特別地,當設備故障時存在混亂上傳數據包現象,此時將存在大量的重復包。筆者采用了所謂的區間判重算法,較好地解決了判重速度問題,使得系統具有很好的可伸縮性(分析算法的論文被EI核心版收錄,呵呵,意外收獲)。事實上,前年的交通部接收服務器還不具備該項功能,可能是太費時間了。

還有,就是在.NET Framework的托管CLR下,系統本身的響應速度如何?當時的確沒有把握,認為只要穩定性和速度滿足要求就行了。三年半運行情況表明,系統有良好的處理速度、很好的穩定性、滿足了部省要求。

C# Socket通信三大問題的基本內容就向你介紹到這里了,希望對你了解和學習C# Socket通信三大問題有所幫助。

【編輯推薦】

  1. C#異步方法和同步方法的差異淺談
  2. FlyTcpFramework在C#異步中的應用
  3. C#異步調用的應用實踐淺談
  4. 委托實現C#異步調用淺析
  5. 淺析C#中異步和多線程的區別
責任編輯:仲衡 來源: 博客園
相關推薦

2011-06-13 10:05:31

Android

2009-08-25 17:24:55

C#串口通信程序

2009-08-20 16:33:44

Socket異步通訊

2014-09-01 15:27:48

FTTH

2025-02-04 17:40:44

2009-08-28 11:43:26

C#數組初始化

2011-10-18 10:36:13

云計算云存儲

2009-06-05 11:07:30

2010-01-11 10:48:15

2012-02-02 14:34:37

C# Socket

2024-04-29 06:39:45

WebSocketSocketC#

2015-11-05 11:20:14

2009-08-03 16:45:02

C#異步Socket

2009-08-18 16:45:40

C# Raw Sock

2009-08-27 17:14:36

C# Socket

2012-09-20 14:58:47

2021-09-13 22:31:24

人工智能疫情技術

2022-06-21 13:48:30

Redis緩存

2021-03-10 13:53:53

5G運營商基站

2023-08-29 07:18:29

AMDN卡FSR 3
點贊
收藏

51CTO技術棧公眾號

国产麻豆一区二区三区| 久久77777| 日日欢夜夜爽一区| 久热精品视频在线观看| 日本一卡二卡在线| 日产精品一区| 亚洲一区中文日韩| 日韩精品久久久| 亚洲精品久久久狠狠狠爱| 欧美在线综合| 欧美激情va永久在线播放| 中文字幕在线看高清电影| 亚洲热av色在线播放| 五月婷婷综合网| 黄瓜视频免费观看在线观看www| 亚洲精品国产精品国| 蜜臀久久久久久久| 欧美一二三视频| 日韩女优一区二区| 国产精品亚洲二区| 亚洲精品一区二区三区影院| 五月天婷婷亚洲| 免费h在线看| 尤物视频一区二区| 亚洲欧洲在线一区| 欧美日韩国产综合视频| 国产成人精品1024| 国产精品视频中文字幕91| 亚洲午夜18毛片在线看| 欧美午夜一区| 九九热这里只有在线精品视| 国产黄色录像视频| 欧美女优在线视频| 亚洲精品国产综合区久久久久久久| 免费网站在线观看黄| 素人一区二区三区| 狠狠操狠狠色综合网| 日本a级片在线观看| 一区二区三区视频在线观看视频| 成人一区二区三区视频在线观看| 91精品综合久久久久久五月天| 天堂网中文字幕| 亚洲一区二区动漫| 97国产精品久久| 四虎永久在线精品| 亚洲大胆av| 欧美激情xxxxx| 久久久久成人精品无码| 伊人久久大香线蕉综合四虎小说| 中文字幕久热精品视频在线| 娇妻被老王脔到高潮失禁视频| 尤物tv在线精品| 亚洲深夜福利视频| www在线观看免费视频| 美女精品一区最新中文字幕一区二区三区| 亚洲精品成人久久电影| 国产一级二级在线观看| 久久97精品| 日韩精品中文字幕有码专区| 魔女鞋交玉足榨精调教| 啪啪亚洲精品| 在线观看欧美成人| 日韩精品久久久久久久的张开腿让 | 国产最新精品| 国产亚洲视频在线观看| 免费看的黄色网| 色琪琪久久se色| 久久国内精品一国内精品| www.97视频| 欧美不卡视频| 91精品国产91久久久| 色屁屁影院www国产高清麻豆| 久久精品91| 国产精品午夜一区二区欲梦| 国产精品怡红院| 不卡电影免费在线播放一区| 蜜桃日韩视频| 在线免费观看黄| 亚洲精品一二三| 黄色一级在线视频| 亚洲日本在线观看视频| 91精品国产综合久久精品app| 台湾佬美性中文| 亚洲综合图色| 久久人人爽人人爽爽久久| 精品少妇久久久| 久久亚洲国产精品一区二区| 成人黄色av网站| 人妻精品无码一区二区| 久久久国产精品不卡| 中文字幕日韩一区二区三区不卡| 乱插在线www| 在线视频中文字幕一区二区| 国产大学生av| 国产精品一国产精品| 久久精品视频亚洲| 中文字字幕在线中文| 狠狠网亚洲精品| 蜜桃导航-精品导航| 久久久久久久久免费视频| 欧美丝袜第一区| 小日子的在线观看免费第8集| 亚洲动漫精品| 精品自拍视频在线观看| 欧美日韩a v| 国产成人av电影免费在线观看| 日本欧美精品久久久| 任你弄在线视频免费观看| 欧洲在线/亚洲| 在线观看亚洲免费视频| 久久精品高清| 人妖精品videosex性欧美| aaa一区二区| 国产欧美一区二区在线观看| 黄色国产一级视频| 国产日韩一区二区三免费高清| 亚洲视频欧洲视频| 日韩无码精品一区二区三区| 国产一区二区在线看| 亚洲成色最大综合在线| 性欧美18xxxhd| 欧美电影免费观看完整版| 在线观看天堂av| 久久夜色精品| 精品一区2区三区| 欧美hdxxxxx| 欧美福利电影网| 极品尤物一区二区| 蜜桃伊人久久| 久久一区二区精品| 日本不卡不卡| 亚洲va天堂va国产va久| 手机看片国产精品| 一区二区影视| 91精品国产91久久久久青草| 在线播放麻豆| 欧美日韩一级二级三级| 老熟妇一区二区| 久久欧美肥婆一二区| 精品免费国产| 美女扒开腿让男人桶爽久久软| 精品国产伦一区二区三区观看方式| 强制高潮抽搐sm调教高h| 蜜桃av噜噜一区二区三区小说| 欧美成人在线免费观看| 欧美亚洲日本精品| 亚洲老板91色精品久久| 日本网站在线播放| 91浏览器在线视频| 欧美视频免费播放| 国产一区二区三区网| 国产成人精品久久| a黄色在线观看| 欧美吞精做爰啪啪高潮| 人人艹在线视频| 蜜桃一区二区三区在线观看| 亚洲日本欧美在线| 日韩电影免费观看高清完整版在线观看| 一本色道久久88综合日韩精品| 一级特黄免费视频| 国产精品区一区二区三区| 亚洲第一狼人区| 一区二区日韩欧美| 肥熟一91porny丨九色丨| 俺来俺也去www色在线观看| 亚洲成人999| 日韩在线播放中文字幕| 欧美国产综合色视频| 6080国产精品| 亚洲精品国产日韩| 日本免费高清一区| 伊人国产精品| 国外色69视频在线观看| 国产1区2区3区在线| 666欧美在线视频| 国产精品白浆一区二小说| 久久综合狠狠综合久久综合88| 国产av人人夜夜澡人人爽| 香蕉综合视频| 国产在线观看一区| av在线日韩| 欧美大成色www永久网站婷| 亚洲国产www| 色老汉一区二区三区| 2025国产精品自拍| 99re热视频精品| 污污网站在线观看视频| 国产精品二区影院| 日韩性感在线| 伊人精品综合| 国产精品久久久久91| 青草在线视频| 在线播放亚洲激情| 亚洲国产精品久久久久久久| 色噜噜狠狠成人中文综合| 久久久久亚洲av无码专区体验| 91丨porny丨首页| 国产福利精品一区二区三区| 国产农村妇女精品一二区| 懂色av一区二区三区四区五区| 久久97久久97精品免视看秋霞| 国产日本欧美一区二区三区在线| 欧美久久天堂| 免费av一区二区| 国产毛片在线| 亚洲第一网站男人都懂| 国产精品高潮呻吟AV无码| 欧美性videos高清精品| 久草福利资源在线观看| 中日韩av电影| 最新中文字幕视频| 国产福利一区在线| jizz18女人| 欧美中文字幕| 自拍日韩亚洲一区在线| 欧美大片专区| 伊人久久大香线蕉午夜av| 免费观看久久av| 国产精品一 二 三| 精品国产三级| 国产精品免费一区豆花| 亚洲精品福利电影| 久久久久亚洲精品| 国内外激情在线| 色噜噜狠狠狠综合曰曰曰| 国产小视频免费在线网址| 亚洲第一男人天堂| 国产黄色一区二区| 欧美一区中文字幕| 国产影视一区二区| 欧美午夜精品理论片a级按摩| www.av麻豆| 精品久久久久久久中文字幕| 国产一级片播放| 亚洲免费观看高清完整版在线| 亚洲欧洲综合网| 中文成人综合网| 国产aaaaaaaaa| 国产精品免费av| 中文字幕第二区| 国产精品久久久久久久第一福利| 免费网站在线高清观看| 久久久久99精品国产片| 9.1成人看片免费版| 99re热视频这里只精品| 久久久久久久久久久国产精品| 99久久伊人网影院| 无码人妻aⅴ一区二区三区| 99久久久免费精品国产一区二区| 亚洲少妇18p| 99久久国产综合精品麻豆| 亚洲精品在线视频免费观看| 91网站在线观看视频| 麻豆精品免费视频| 国产清纯在线一区二区www| 国产三级av在线播放| 国产欧美一区二区精品性色| 俄罗斯毛片基地| 日韩一区在线看| 久草视频在线免费看| 香港成人在线视频| 国产精品21p| 欧美午夜一区二区| 国产在成人精品线拍偷自揄拍| 91精品久久久久久久91蜜桃| 精品国产无码一区二区三区| 精品国产91亚洲一区二区三区婷婷| 全国男人的天堂网| 国产一区二区三区高清在线观看| 成年人在线视频免费观看| 精品久久国产精品| 51精品在线| 国产精品久久久久久久久久 | 少妇视频在线| 97成人超碰免| 国外成人福利视频| 高清av免费一区中文字幕| 日韩欧美在线精品| 亚洲一区二区免费视频软件合集| 亚洲欧美色图| aa在线免费观看| 精品制服美女丁香| 波多野结衣加勒比| 国产精品久久久久久久久免费丝袜| 日韩影院一区二区| 欧美性猛交xxxx免费看久久久| 亚洲一级特黄毛片| 亚洲国产日韩欧美综合久久| 99精品老司机免费视频| 欧美黑人视频一区| 国产69精品久久久久9999人| 超碰97人人人人人蜜桃| 国产一区日韩| 日本精品久久久久久久久久| 蜜桃视频一区二区三区在线观看| 国产日韩视频一区| 国产精品盗摄一区二区三区| 亚洲免费激情视频| 777欧美精品| 黄色美女网站在线观看| 欧美第一淫aaasss性| 日韩另类视频| 国内视频一区| 亚洲国产成人精品女人| 国产精品第12页| 成人性色生活片免费看爆迷你毛片| 精品国产成人亚洲午夜福利| 亚洲国产成人av网| 国产尤物视频在线观看| 国产亚洲欧美日韩美女| www.综合网.com| 91免费综合在线| 欧美日韩在线播放视频| 久久精品国产精品亚洲色婷婷| 国产乱码一区二区三区| 亚洲不卡的av| 日本精品一区二区三区高清 | 久久成人福利视频| 狠狠色丁香婷婷综合| 欧美黄色高清视频| 欧美日韩亚洲一区二| 黄色福利在线观看| 欧美成人剧情片在线观看| 精品久久福利| 日韩av高清在线播放| 鲁大师成人一区二区三区| 日本在线不卡一区二区| 一区二区三区精品视频在线| 国产精品美女一区| 最近2019年好看中文字幕视频| 欧美日韩国产v| 鲁片一区二区三区| 国产免费成人| 久久久久久久久久久国产精品| 欧美日韩人人澡狠狠躁视频| 天天干,夜夜爽| 久久免费国产精品1| 都市激情久久| 国产主播自拍av| www.在线成人| 日本免费观看视| 日韩国产欧美精品一区二区三区| aa级大片免费在线观看| 国产精品二区三区四区| 激情视频一区| 国产激情视频网站| 午夜精品久久久久久久| 五月婷婷六月丁香综合| 88xx成人精品| 精品中文一区| 啊啊啊国产视频| 中文字幕一区免费在线观看| 91片黄在线观看喷潮| 久久久精品免费| 日韩在线观看一区二区三区| 91亚洲精品国产| caoporn国产精品| 91精品国产综合久久久蜜臀九色| 亚洲欧美日韩国产成人| 久久天堂av| 自拍视频一区二区三区| 国产精品一二三| 亚洲国产精品成人无久久精品| 日韩av中文在线| 日韩一区二区三区在线免费观看 | 亚洲成人久久一区| 国产亚洲成av人片在线观看 | 理论视频在线| 国产精品亚洲网站| 亚洲精品一二三区区别| 年下总裁被打光屁股sp| 欧美日韩中文在线观看| 成人精品一区| 粉嫩av一区二区三区免费观看| 99精品国产在热久久婷婷| 一区二区三区伦理片| 91精品国产一区二区三区香蕉| 91白丝在线| 亚洲精品国产精品国自产| 国内精品国产成人| 日本网站在线播放| 日韩综合中文字幕| 精品女人视频| 亚洲久久中文字幕| 亚洲一区二区欧美日韩| 狠狠v欧美ⅴ日韩v亚洲v大胸| 国产美女搞久久| 一本久道综合久久精品| 污污视频网站在线免费观看| 欧美成人三级电影在线| 国产一区一一区高清不卡| 久操手机在线视频| 国产日韩欧美一区二区三区乱码| 国产日韩免费视频| 日产精品99久久久久久| 欧美日本三区| 国产aaaaaaaaa| 亚洲美女久久久| 2020最新国产精品| 久久精品影视大全|