虽然在APP应用、Web应用、Winform应用的大趋势下,越来越多的企业倾向于开发这些应用系统,但是在某些场合下Socket的应用是必不可少的,例如,一些停车场终端设备的接入、农业或水利设备的数据采集、压力监测等,以及常见的IM(即时通讯,如腾讯QQ、阿里旺旺等)客户端,都可以使用Socket框架用于相关的数据采集和信息通信目的,Socket应用程序可以作为APP应用程序、Web应用程序和Winform应用程序的补充。一、Socket应用场景一般情况下,客户端和服务端需要交换数据进行Socket连接,即后台提供数据查询或写入相关操作,其应用场景也由后台一个应用数据库支持.,如下。Socket服务器与客户端的通信原理如下。客户端通过服务器地址和端口发起Socket连接。服务端收到Socket客户端的请求后,打开一个新的Socket连接进行通信管理。双方基于Socket协议交换数据。交互处理。2、Socket框架设计思路Socket开发属于通信底层的开发。NET本身也提供了非常丰富的类来实现Socket的开发,高效使用。要想掌握或理解Socket开发,必须了解下面描述的场景和知识。TCPclient,连接server,进行数据通信TCPserver,负责监听client连接管理,比如登录,注销等,使用独立线程处理数据接收管理,负责数据接收,处理队列分发,使用一个独立的线程进行处理,简单处理后称之为“数据处理线程”。Content,可以封装以下功能的操作类,可以作为普通基类:BaseSocketClient,客户端基类,负责客户端的连接、断开、发送、接收等操作。BaseSocketServer,TCP服务器管理的基类,负责在独立线程中监听指定端口,如果有客户端连接,则做相应处理。BaseClientManager,连接客户端管理类,该类主要负责客户端登录超时处理、连接客户端维护、登录验证客户端维护、客户端登录验证接口、客户端发送数据处理等功能。BaseReceiver,数据接收处理类,该基类是所有接收数据的处理类,负责维护数据的队列关系,并进行进一步处理。ThreadHandler,一个数据无关的线程处理类,可以用一个独立的线程来处理每一种不同类型的数据(不同的协议类型)。这里封装了一个基类,用于处理独立的数据线程。1)Socket客户端基类我们知道,Socket通信分为客户端和服务端。他们处理的事情是不同的。因此,为了实现更好的代码复用,我们在此基础上进行了不同的封装。对于Socket客户端类,我们主要需要提供基本的Socket连接和断开、接收和发送、数据包解包等常规操作,所以我们封装了一个客户端基类BaseSocketClient。但是,为了实现基于不同应用客户端的不同业务通信,我们可以在服务端接收和处理不同的客户端,所以需要对Socket客户端进行扩展。比如这个框架增加了一个中心Socket客户端,分支的Socket客户端,以及桥接客户端(可以实现转发数据的功能)。2)Socket服务器基类是相对于Socket客户端基类而言的。我们还创建了一个套接字服务器基类。通过继承,我们可以简化代码的重复。服务器基类称为TCP服务器管理基类BaseSocketServer,负责在独立线程中监听指定端口,如果有客户端连接,则进行相应处理。同样,我们也派生了两个服务端基类,方便对不同的Socket客户端进行差异化处理。比如对应上面的中心客户端类ClientOfCall,我们添加一个对应的服务端类ServerForCall,其他类似,它们的继承关系如下。另外,由于我们允许访问不同的Socket客户端类(如ClientOfCall、ClientOfShop),因此在服务端也会有相应的Socket服务端类(ServerForCall、ServerForShop)来监听不同的端口。如果有Socket访问,服务器类会分配给不同的Socket客户端管理类来处理它们的关系和数据。这里会进一步引入客户端管理类的概念,对应不同的Socket客户端。这里根据需要还定义了一个Socket客户端管理基类BaseClientManager
