温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#中怎么实现异步Socket

发布时间:2021-07-07 16:00:27 来源:亿速云 阅读:115 作者:Leah 栏目:编程语言

C#中怎么实现异步Socket,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

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

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)

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI