Socket开发是属于通信底层的开发,.NET也提供了非常丰富的类来实现Socket的开发工作,本篇不是介绍这些基础类的操作,而是从一个大的架构方面阐述Socket的快速开发工作,本篇以TCP模式进行程序的开发介绍,以期达到抛砖引玉的目的。
要掌握或者了解Socket开发,必须了解下面所述的场景及知识。
1、TCP客户端,连接服务器端,进行数据通信
2、TCP服务器端,负责侦听客户端连接
3、连接客户端的管理,如登陆,注销等,使用独立线程处理
4、数据接收管理,负责数据的接受,并处理队列的分发,使用独立线程处理,简单处理后叫给“数据处理线程”
5、数据处理线程,对特定的数据,采用独立的线程进行数据处理
6、数据的封包和解包,按照一定的协议进行数据的封装和解包
针对以上内容,可以封装以下功能的操作类作为共用基类:
1、BaseSocketClient,客户端基类
2、BaseSocketServer,TCP服务器管理基类
3、BaseClientManager,连接客户端管理类
4、BaseReceiver,数据接收处理类
5、ThreadHandler,数据独立线程处理类
6、PreData、DataTypeKey、Sign分别是定义数据的基础格式、协议标识、分隔符号等,另外我们定义需要发送的实体类信息,发送和接收通过实体类进行数据转换和解析。
以上类是基类,不能直接使用,在服务器端和客户端都要继承相应的类来完成所需要的工作。
BaseSocketClient只要负责客户端的链接、断开、发送、接收等操作,大致的定义如下:
2、BaseSocketServer,TCP服务器管理基类
该类负责在独立的线程中侦听指定的端口,如果有客户端连接进来,则进行相应的处理,重载处理函数可以实现独立的处理。大致的定义如下。
3、BaseClientManager,连接客户端管理类
由于考虑性能的影响,客户端对象的管理交给一个独立的线程进行处理,一则处理思路清晰,二则充分利用线程的性能。该类主要负责客户端登录超时处理,连接上来的客户端维护,经过登陆验证的客户端维护,客户端登陆验证接口,客户端发送数据处理等功能。
4、BaseReceiver,数据接收处理类
该基类是所有接受数据的处理类,负责维护数据的队列关系,并进一步进行处理。
5、ThreadHandler,数据独立线程处理类
对每个不同类型的数据(不同的协议类型),可以用独立的线程进行处理,这里封装了一个基类,用于进行数据独立线程的处理。
6、PreData、DataTypeKey、Sign
PreData是定义了一个标准的协议数据格式,包含了协议关键字、协议内容、用户标识的内容,代码如下。
其中的DataTypeKey和Sign定义了一系列的协议头关键字和数据分隔符等信息。
下面是数据分割符号,定义了数据包的开始符号、结束符号,分隔符号和数据分隔符等。
另外,前面说了,我们数据是通过实体类作为载体的,我们知道,收到的Socket数据经过粗略的解析后,就是PreData类型的数据,这个是通用的数据格式,我们需要进一步处理才能转化为所能认识的数据对象(实体类对象),同样,我们发送数据的时候,内容部分肯定是按照一定协议规则串联起来的数据,那么我们就需要把实体转化为发送的数据格式。综上所述,我们通过实体类,必须实现数据的发送和读取的转换。
在接下来的工作中,就需要继承以上的基类,完成相关的对象和数据的处理了。
相关推荐
cshapr连接数据库--SqlHelper基类
多继承下的派生类构造函数必须同时负责该派生类的所有基类构造函数的参数传递。且构造函数和析构函数的调用顺序和单继承是一样的,先调用基类构造函数,再调用对象成员的构造函数,最后调用派生类的构造函数。那么...
recyclerview 封装基类适配器和基类holder 以及分割线使用
C#——帮助类基类大全,涵盖大部分日常使用
该框架的初步类结构如下 CnForm 所有窗口基类 --CnBaseForm 业务窗口基类 --CnMainForm 主窗口或子窗口基类 --CnEditForm 数据编辑窗口基类 --CnQueryForm 数据查询窗口基类 --CnFrameForm MDI Frame窗口基类 ...
开发技术-硬件
2.定义Shape类的派生类三角形Tangle,使用base关键字调用基类构造函数,重写Shape类继承的虚方法:求面积虚方法Mianji(),求周长虚方法Zhouchang()。 3.定义Shape类的派生类圆形Circle,重写Shape类继承的虚方法:...
行业文档-设计装置-乙烯基类共聚物造纸填料分散剂的制备方法.zip
基类,派生类
定义Shape类的派生类三角形Tangle,使用base关键字调用基类构造函数,重写Shape类继承的虚方法:求面积虚方法Mianji(),求周长虚方法Zhouchang()。 3.定义Shape类的派生类圆形Circle,重写Shape类继承的虚方法:求...
DotNet4.0- C#基类库大全苏飞版
行业文档-设计装置-巯基类化合物体外检测试剂、制备方法及检测复合试纸
1、声明抽象基类Shape,由它派生出3个派生类:Cirle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象是给定。
题目:设计基类点类(Point)、直接派生类圆类(Circle)、间接派生类圆柱体类(Cylinder),将求面积的函数(area)声明成虚函数,并在主函数实现虚函数调用,输出点类、圆类和圆柱体类面积。提示:其他数据成员和...
函数隐藏是指派生类中函数与基类中的函数同名,但是这个函数在基类中并没有被定义为虚函数,这种情况就是函数的隐藏。 所谓隐藏是指使用常规的调用方法,派生类对象访问这个函数时,会优先访问派生类中的这个函数,...
《MFC程序员的WTL指南: Part II - WTL 界面基类》配套代码, 演示了WTL中框架界面的实现、消息的处理等。 关键字:WTL,CMessgeLoop,CFrameWindowImpl
11.基于HBase的Dao基类和实现类开发一 12.基于HBase的Dao基类和实现类开发二 13.项目1-地区销售额-需求分析和架构设计 14.项目1-地区销售额-Spout融合Kafka Consumer及线程安全测试 15.项目1-地区销售额-Bolt业务...
一个基于CMake跨平台开发环境的多模块的QT配置示例。 同时在其中内置了一个QT自定义窗体的基类。
C#基类,里面包含各种辅助工具类,减少代码开发
|--BaseActivity 基类Activity |--GuideActivity 引导页Activity cc.itbox.babysay.fragments |--BaseFragment |--GuideFragment 引导页Fragment |--DiscoverFragment 发现 |--MainPageFragment 首页 |--...