- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C__实现的多线程异步Socket数据包接收器框架
C# 实现的多线程异步Socket数据包接收器框架
几天前在博问中看到一个C# Socket问题,就想到笔者2004年做的一个省级交通流量接收服务器项目,当时的基本求如下:
接收自动观测设备通过无线网卡、Internet和Socket上报的交通量数据包
全年365*24运行的自动观测设备5分钟上报一次观测数据,每笔记录约2K大小
规划全省将有100个左右的自动观测设备(截止2008年10月还只有30个)
????? 当时,VS2003才发布年多,笔者也是接触C#不久。于是Google了国内国外网,希望找点应用C#解决Socket通信问题的思路和代码。最后,找 到了两篇帮助最大的文章:一篇是国人写的Socket接收器框架,应用了独立的客户端Socket会话(Session)概念,给笔者提供了一个接收服务 器的总体框架思路;另一篇是美国人写的,提出了多线程、分段接收数据包的技术方案,描述了多线程、异步Socket的许多实现细节,该文坚定了笔者采用多 线程和异步方式处理Socket接收器的技术路线。
???? 具体实现和测试时笔者还发现,在Internet环境下的Socket应用中,需要系统有极强的容错能力:没有办法控制异常,就必须允许它们存在(附加源 代码中可以看到,try{}catch{}语句较多)。对此,笔者设计了一个专门的检查和清理线程,完成无效或超时会话的清除和资源释放工作。
???? 依稀记得,国内框架作者的名称空间有ibm,认为是IBM公司职员,通过邮件后才知道其人在深圳。笔者向他请教了几个问题,相互探讨了几个技术关键点。可 惜,现在再去找,已经查不到原文和邮件了。只好借此机会,将本文献给这两个素未谋面的技术高人和同行,也盼望拙文或源码能给读者一点有用的启发和帮助。
???? 整个系统由三个核心线程组成,并由.NET线程池统一管理:
侦听客户端连接请求线程:ListenClientRequest(),循环侦听客户端 连接请求。如果有,检测该客户端IP,看是否是同一观测设备,然后建立一个客户端TSession对象,并通过Socket异步调用方法 BeginReceive()接收数据包、EndReceive()处理数据包
数据包处理线程:HandleDatagrams(),循环检测数据包队列_datagramQueue,完成数据包解析、判断类型、存储等工作
客户端状态检测线程:CheckClientState(),循环检查客户端会话表_sessionTable,判断会话对象是否有效,设置超时会话关闭标志,清楚无效会话对象及释放其资源
???? 系统主要由3个类组成:
TDatagramReceiver(数据包接收服务器):系统的核心进程类,建立Socket连接、处理与存储数据包、清理系统资源,该类提供全部的public属性和方法
TSession(客户端会话):由每个客户端的Socket对象组成,有自己的数据缓冲区,清理线程根据该对象的最近会话时间判断是否超时
TDatagram(数据包类):判断数据包类别、解析数据包
???? 下面简介核心类TDatagramReceiver的关键实现代码。
3.1? 系统启动
????? 系统启动方法StartReceiver()首先清理资源、创建数据库连接、初始化若干计数值,然后创建服务器端侦听Socket对象,最后调用静态方法ThreadPool.QueueUserWorkItem()在线程池中创建3个核心处理线程。
Code///?summary///??启动接收器///?/summarypublic?bool?StartReceiver(){????try????{????????_stopReceiver?=?true;????????this.Close();????????if?(!this.ConnectDatabase())?return?false;????????_clientCount?=?0;????????_datagramQueueCount?=?0;????????_datagramCount?=?0;????????_errorDatagramCount?=?0;????????_exceptionCount?=?0;????????_sessionTable?=?new?Hashtable(_maxAllowClientCount);????????_datagramQueue?=?new?QueueTDatagram(_maxAllowDatagramQueueCount);????????_stopReceiver?=?false;??//?循环中均要该标志????????if?(!this
您可能关注的文档
最近下载
- 个人开通天然气委托书范本 .pdf VIP
- 2025-2026学年人教版(2024)小学体育与健康二年级(全一册)教学设计(附教材目录).docx
- MG-WD系列采煤机说明书.doc
- 2025年河南省高考物理试卷(含答案解析).docx
- 学堂在线网课《生活英语读写》课后作业单元考核答案.docx VIP
- 2025年第42届全国中学生物理竞赛预赛试题(学生版+解析版) .pdf VIP
- 安全牛:API安全技术应用指南(2024版).pdf VIP
- 2024年浙江省中考统考科学试卷试题真题(含答案解析).pdf VIP
- 《吴门验方》学习笔记.docx VIP
- 新目标大学英语-《综合教学教程》第四册(WELearn答案解析).DOC VIP
文档评论(0)