| 相关分类 | |
| 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分 | |
|
发 布 者:tomore 发布日期:2006-08-31 11:59 资源类别: 所属子类: 开发语言:其他开发语言 相关标签:使用 异步 socket 编程 实现 tcp 网络 服务 通讯 构架 基础 类库 部分
【搜索更多相关下载】
更多“在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分”相关内容.... (阅览次数:1563次) 【大 中 小】【关闭】 【会员升级VIP】 【上传开发资源获取金币】 |
|
|
详细描述: ////////////////////////////////////////////////////////////////////////////////////////// /* 标题:在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分 当看到.NET中TcpListener和TcpClient的时候,我非常高兴,那就是我想要的通讯模式 但是使用之后发现它们的力量太单薄了,我们需要一个更好的类库来替代它们. 下面提供了一些类,可以很好的完成Tcp的C/S通讯模式.在本文的第二部分,我将为大家介绍怎么使用它们 主要通过事件来现实整个的功能: 服务器的事件包括: 服务器满 新客户端连接 客户端关闭 接收到数据 客户端使用的事件包括: 已连接服务器 接收到数据 连接关闭 另外为了灵活的处理需求变化,还提供了编码器和报文解析器的实现方法. 注意:该类库没有经过严格的测试,如出现Bug,请发送给我,我会觉得你的整个行为是对我的鼓励和支持. */ ////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// (C)2003-2005 C2217 Studio /// 保留所有权利 /// /// 文件名称: TcpCSFramework.cs /// 文件ID: /// 编程语言: C# /// 文件说明: 提供TCP网络服务的C/S的通讯构架基础类 /// (使用异步Socket编程实现) /// /// 当前版本: 1.1 /// 替换版本: 1.0 /// /// 作者: 邓杨均 /// EMail: dyj057@gmail.com /// 创建日期: 2005-3-9 /// 最后修改日期: 2005-3-17 /// /// 历史修改记录: /// /// 时间: 2005-3-14 /// 修改内容: /// 1.创建Ibms.Net.TcpCSFramework命名空间和添加Session对象. /// 2.修改NetEventArgs类,以适应新添加对象. /// 3.添加了会话退出类型,更适合实际的情况. /// 注意: /// * 强制退出类型是应用程序直接结束,比如通过任务管理器结束 /// 程序或者程序异常退出等,没有执行正常的退出方法而产生的. /// * 正常的退出类型是应用程序执行正常的退出的方法关键在于 /// 需要调用Socket.Shutdown( SocketShutdown.Both )后才调用 /// Socket.Close()方法,而不是直接的调用Socket.Close()方法, /// 如果那样调用将产生强制退出类型. /// /// 时间: 2005-3-16 /// 修改内容: /// 1.创建TcpCli,Coder,DatagramResover对象,把抽象和实现部分分离 /// 2.文件版本修改为1.1,1.0版本仍然保留,更名为: /// TcpCSFramework_v1.0.cs /// 3.在TcpServer中修改自定义的hashtable为系统Hashtable类型 /// /// </summary> using System; using System.Net.Sockets; using System.Net; using System.Text; using System.Diagnostics; using System.Collections; namespace Ibms.Net.TcpCSFramework { /// <summary> /// 网络通讯事件模型委托 /// </summary> public delegate void NetEvent(object sender, NetEventArgs e); /// <summary> /// 提供TCP连接服务的服务器类 /// /// 版本: 1.1 /// 替换版本: 1.0 /// /// 特点: /// 1.使用hash表保存所有已连接客户端的状态,收到数据时能实现快速查找.每当 /// 有一个新的客户端连接就会产生一个新的会话(Session).该Session代表了客 /// 户端对象. /// 2.使用异步的Socket事件作为基础,完成网络通讯功能. /// 3.支持带标记的数据报文格式的识别,以完成大数据报文的传输和适应恶劣的网 /// 络环境.初步规定该类支持的最大数据报文为640K(即一个数据包的大小不能大于 /// 640K,否则服务器程序会自动删除报文数据,认为是非法数据),防止因为数据报文 /// 无限制的增长而倒是服务器崩溃 /// 4.通讯格式默认使用Encoding.Default格式这样就可以和以前32位程序的客户端 /// 通讯.也可以使用U-16和U-8的的通讯方式进行.可以在该DatagramResolver类的 /// 继承类中重载编码和解码函数,自定义加密格式进行通讯.总之确保客户端与服务 /// 器端使用相同的通讯格式 /// 5.使用C# native code,将来出于效率的考虑可以将C++代码写成的32位dll来代替 /// C#核心代码, 但这样做缺乏可移植性,而且是Unsafe代码(该类的C++代码也存在) /// 6.可以限制服务器的最大登陆客户端数目 /// 7.比使用TcpListener提供更加精细的控制和更加强大异步数据传输的功能,可作为 /// TcpListener的替代类 /// 8.使用异步通讯模式,完全不用担心通讯阻塞和线程问题,无须考虑通讯的细节 /// /// 注意: /// 1.部分的代码由Rational XDE生成,可能与编码规范不符 /// /// 原理: /// /// /// 使用用法: /// /// 例子: /// /// </summary> public class TcpSvr { #region 定义字段 /// <summary> /// 默认的服务器最大连接客户端端数据 /// </summary> public const int DefaultMaxClient=100; /// <summary> /// 接收数据缓冲区大小64K /// </summary> public const int DefaultBufferSize = 64*1024; /// <summary> /// 最大数据报文大小 /// </summary> public const int MaxDatagramSize = 640*1024; /// <summary> /// 报文解析器 /// </summary> private DatagramResolver _resolver; /// <summary> /// 通讯格式编码解码器 /// </summary> private Coder _coder; /// <summary> /// 服务器程序使用的端口 /// </summary> private ushort _port; /// <summary> /// 服务器程序允许的最大客户端连接数 /// </summary> private ushort _maxClient; /// <summary> /// 服务器的运行状态 /// </summary> private bool _isRun; /// <summary> /// 接收数据缓冲区 /// </summary> private byte[] _recvDataBuffer; /// <summary> /// 服务器使用的异步Socket类, /// </summary> private Socket _svrSock; /// <summary> /// 保存所有客户端会话的哈希表 /// </summary> private Hashtable _sessionTable; /// <summary> /// 当前的连接的客户端数 /// </summary> private ushort _clientCount; #endregion #region 事件定义 /// <summary> /// 客户端建立连接事件 /// </summary> public event NetEvent ClientConn; /// <summary> /// 客户端关闭事件 /// </summary> public event NetEvent ClientClose; /// <summary> /// 服务器已经满事件 /// </summary> public event NetEvent ServerFull; /// <summary> /// 服务器接收到数据事件 /// </summary> public event NetEvent RecvData; #endregion #region 构造函数 /// <summary> /// 构造函数 /// </summary> /// <param name="port">服务器端监听的端口号</param> /// <param name="maxClient">服务器能容纳客户端的最大能力</param> /// <param name="encodingMothord">通讯的编码方式</param> public TcpSvr( ushort port,ushort maxClient, Coder coder) { _port = port; _maxClient = maxClient; _coder = coder; } /// <summary> /// 构造函数(默认使用Default编码方式) /// </summary> /// <param name="port">服务器端监听的端口号</param> /// <param name="maxClient">服务器能容纳客户端的最大能力</param> public TcpSvr( ushort port,ushort maxClient) { _port = por |
|
|
|
|
相关下载资源: 该聊天程序包括服务器和客户端两部分,使用是MFC的CSOCKET类。它可以使多个人聊天,其工作方式类似于网上聊该聊天程序包括服务器和客户端两部分,使用是MFC的CSOCKET类。它可以使多个人聊天,其工作方式类似于网上聊天室 ... 一个利用TCP/IP实现Chat功能的程序(服务器端程序)(25KB)一个利用TCP/IP实现Chat功能的程序(服务器端程序)(25KB) 用套接口实现UDP协议的网络通信用套接口实现UDP协议的网络通信 套接字是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看做不同 ... 深入 CSocket 编程之阻塞和非阻塞模式适合初中级读者阅读 有时,花上几个小时阅读、调试、跟踪优秀的源码程序,能够更快地掌握某些技术关键点和精髓 ... 异步 SOCKET 编程 - 发送和接收数据原作者: DREW SIKORA 我本想把发送和接收分开作为两部分,但是最后我决定只略微解释一下 FD_READ ,留下更多 ... Socket 编程简介《Linux 公报》……让Linux更富魅力! Socket 编程简介 作者:Pedro Paulo Ferreira Bueno 和 Antoni ... |
|