使用Net类库,实现的基于TCP/IP简单的通讯框架框架(一)

      今天给大家介绍本人构建的基于TCP/IP的通讯框架,只需使用几个简单的类,就可以轻松构建服务器端和客户端应用程序。该框架在通讯中传输的数据可以是任何的基础类型(如:string 、int等简单类型),也可以是自定义的数据类型(根据你使用的需要),下面详细介绍该框架的实现:

 

第一节 框架结构介绍

 

     该框架使用.Net类库的System.Net.Sockets名称空间的Socket 类和TcpListener类为基础实现的,是一个面向连接的通讯框架。

     该框架由3个层次组成,基础层、服务端应用层、客户端应用层,先简要的介绍一下各层的功能:

 

     ◆基础层:

      该层是整个框架的核心,负责从Socket套接字中获取、发送数据,检查连接是否断开,并负责处理数据边界,将数据转换成原来的数据类型。

 

    ◆服务端应用层:

      该层为服务器端提供侦听、接受客户端的连接请求、管理和客户端的连接。

  

    ◆客户端应用层:

      该层提供向服务器端连接,发送和接收数据的功能。

 

 

各层之间的关系如下图所示:

Socket pic

 各层的具体实现将在下一节详细介绍。

 

 第二节 框架的实现

 

      2.1 基础层的实现

           基础层由3个类和两个代理组成,3个类分别为:BaseMessage 、DataManage、MessageDoWith,2个代理类型为:SocketMessageHandle 、ConnectionMessageHandle。

 

           首先介绍这3个类:

           BaseMessage  该类是提供数据在TCP通道中传输的数据类类,所有数据都将通过它的实例对象来传输。类的定义如下图

 

basemessage类图

          该类由两个字段组成,即:DataSource和MessageType,这两个字段的作用如下:

DataSource属性的类型是object,该字段用来传输我们需要的数据(可以是简单的类型,也可以是自定义的类型,注意:自定义的类型一定要在该类型上加上[Serializable]属性)。

MessageType属性的类型是short,该字段用来定义我们DataSource传输的数据类型,其值对应的类型由具体应用来定义(例如: 定义 0 为用户登录消息 1 为用户登录成功 2 为用户登录失败 等等)。

      该类的代码如下:

 

      DataManage  数据处理类,负责将要将传输的数据(BaseMessage类的实例)消息序号化为二进制数据和将二进制数据反序列化为对象。该类的定义如下图:

 

DataManage类图

 

      该类由两个方法组成:Serialize和UnSerialize,这两个方法的功能如下:

Serialize方法的功能是:将传输的数据(BaseMessage类的实例)序列化成二进制数据。

UnSerialize方法的功能是:将接收到的二进制数据反序列化为传输前的数据(BaseMessage类的实例)。

 该类的代码如下:

 

    MessageDoWith 该类负责消息的发送和接收,其类图如下:

 MessageDoWith类图

   该类有两个主要方法和两个事件组成,下面介绍一下这两个方法和事件,

   Send方法:用来发送数据,数据是baseManage类的实例。

   ReceiveData方法:接收从Socket套接字发送来的数据,当接收到完整的数据后,发出接收到数据的消息,通知消息处理程序处理。

 

   OnReceiveMessage 事件:在收到完整的消息包,通知消息处理程序处理。

   OnSocketClosed事件:检测到连接已断开,发出连接已断开的通知。

  具体的实现可参与如下的代码:

 

 

       两个代理见代码:

   

 

 

 

   2.2 服务器端应用层的实现

 

     服务器端应用层由ConnectionListener 和 ServerToClientLink 两个类组成,这两个类的功能介绍如下:

     ConnectionListener 类,服务器端连接侦听器。用来侦听客户端的连接,并接收连接。该类的类图如下:

 ConnectionListener

 该类的代码如下:

 

     ServerToClientLink 类,服务器与客户端的连接类,负责管理客户端与服务器的消息通讯,包括数据的发送和接收。类图如下:

ServerToClientLink

 该类的代码如下:

 

 

   2.3 客户端应用层的实现

 

    客户端应用层由ClientToServerLink类组成,该

    类的功能是,客户端向服务器端发出连接请求,连接建立后,可以向服务器发送消息和接收来自服务器的消息。类图如下:

 

 ClientToServerLink

    

 该类的代码:

 

 

 框架的结构就介绍到这里,有关使用方法,我将在下一篇文章介绍,需要源码可以发邮件到 wuyb_2004@QQ.COM

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.net 稳定 高效 易用 可同步 TCP 通信框架 使用平台: WinXP,WIN7,WIN8,WINCE,WINPHONE。 使用.net 2.0 框架。 主要功能介绍: 1、可以代替 Oracle,Mysql客户端 在不安装Oracle,MySql客户端的情况下访问, 对数据库进行间接访问(需开始框架服务器端)。 2、可以使本来没有网经功能的Sqlite具有网络访问的能力。(也是需要开启服务器端) 以上两点可以兼容现有代码生成器时,客户端代码仅需要特别小的改动就可以。 3、基本功能。可以实现聊天,传文件,图片。 4、使用长连接,有断线自动连接功能,心跳包。 5、使用自定义数据包协议,自建Session机制加强数据连接安全。 6、框架稳定,支持高并发。 7、简单的事件处理机制。使用更加简单。 8、支持同步处理,使程序的开发更架简单,不需要另行回调处理。 下载地址: 使用方式: 首选需要 引用 DataUtils.v1.1.dll。DataUtils 内包含客户端与服务器端 处理类。 1、服务器端 代码示例。 设置服务器端默认端口 ,不设置端口会使用默认端口 TcpSettings.DefultPort = 8511; 既可以使用静态默认对象,也可以创建服务器端对象。 SocketListener server= new SocketListener(); 对象创建后 注册一些事件,以接收客户端发送的信息。 SocketListener.Server.RegeditSession += new Feng.Net.Tcp.SocketListener.RegeditSessionEventHandler(server_RegeditSession); RegeditSession 事件用于是否允许客户端连接此服务器。可以使用用户名,密码的核对方式。 SocketListener.Server.DataReceive += new SocketListener.DataReceiveEventHandler(server_DataReceive); DataReceive 在这个事件里处理接收到的数据。 事件注册完成就可以打开监听 SocketListener.Server.StartListening(); 2、客户端 代码示例 设置服务器IP地址 TcpSettings.DeafultIPAddress = "192.168.1.3"; TcpSettings.DefultPort = 8511;//不设置端口会使用默认端口。 这样就可以使用默认的静态客户端了。 也可以自己创建对象。 客户端创建后需要在Connected事件注册用户,以限制某些用户是否可以使此链接。用户来源可以是数据库等。 void client_Connected(object sender, SocketClient sh) { Client.RegeditSession("aaa", "bbb"); } 发送文字消息给其他用户 SocketClient.Client.SendToOtherUser(string user, string text); //USER代表发达的目白用户,text表示为发送的内容。 发送图片,音频,视屏可以使用 SocketClient..SendToOtherUser(string user, byte[] data)////USER代表发达的目白用户,data表示为发送的内容。 data数据中数据有多种类型时可以使用 using (Feng.IO.BufferWriter bw = new Feng.IO.BufferWriter()) { bw.WriteBitmap(new Bitmap(100, 100)); bw.Write(text);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值