当前位置: 首页 > news >正文

CowBoy.Sockets的源码介绍,及搭建一个简单的网络服务器的过程,详细附源码

我们在工作中肯定会遇到网络通信方便的软件需要维护和开发,不管是C++,C#,java中原生的Socket我们可以写过。我们都知道定义一套完整的Socket通讯服务端和客户端以及网络通讯的协议是一件很麻烦的事情,而今天要介绍的Cowboy.Sockets开源框架帮助我们搭建好了通讯的服务端和客户端,同时网络通讯中所使用的数据协议Cowboy.Sockets也帮我们制定好了一个框架,方便了我们后续开发,提高了程序员们的开发效率。

github地址:https://github.com/ninenines/cowboy

1.CowBoy源码介绍

本篇我们主要介绍CowBoy.Sockets的源码结构,及搭建一个简单的网络服务器的过程。可以看到搭建Tcp的网络服务主要用到源码Tcp目录下的Framing 和 Server部分,这里我们采用APM方式。

APM 方式:TcpSocketServer

TcpSocketServer 的实现是基于 .NET Framework 自带的 TcpListener 和 TcpClient 的更进一步的封装,采用基于 APM 的 BeginXXX 和 EndXXX 接口实现。

TcpSocketServer 中的 Accept Loop 指的就是,

  • BeginAccept -> EndAccept-> BeginAccept -> EndAccept -> BeginAccept -> ...

每一个建立成功的 Connection 由 TcpSocketSession 来处理,所以 TcpSocketSession 中会包含 Read Loop,

  • BeginRead -> EndRead -> BeginRead -> EndRead -> BeginRead -> ...

而Framing文件夹中的内容是来定义我们在通讯过程中所发送的消息结构的定义组包,解包等,以及过滤。

2.新建CowBoyDemo服务端工程

2.1新建.net解决方案,新建类库项目Cowboy.Socket,将源码中Buffer,Tcp中的源码拷贝到项目如下:

2.2新建test控制台项目,用于测试,代码非常简单

a)new TcpSocketServer(5555, config);

b)监听TcpSocketServer类暴露的ClientConnected,ClientDisconnected,ClientDataReceived三个事件

class Program { static TcpSocketServer _server; static void Main(string[] args) { StartServer(); Console.WriteLine("TCP server has been started."); while (true) { try { string text = Console.ReadLine(); } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { _server.Shutdown(); Console.WriteLine("TCP server has been stopped on [{0}].", _server.ListenedEndPoint); Console.ReadKey(); } } }
private static void StartServer() { var config = new TcpSocketServerConfiguration(); //config.UseSsl = true; //config.SslServerCertificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(@"D:\\Cowboy.pfx", "Cowboy"); //config.SslPolicyErrorsBypassed = false; //config.FrameBuilder = new FixedLengthFrameBuilder(20000); config.FrameBuilder = new RawBufferFrameBuilder(); //config.FrameBuilder = new LineBasedFrameBuilder(); //config.FrameBuilder = new LengthPrefixedFrameBuilder(); //config.FrameBuilder = new LengthFieldBasedFrameBuilder(); _server = new TcpSocketServer(5555, config); _server.ClientConnected += server_ClientConnected; _server.ClientDisconnected += server_ClientDisconnected; _server.ClientDataReceived += server_ClientDataReceived; _server.Listen(); } static void server_ClientConnected(object sender, TcpClientConnectedEventArgs e) { Console.WriteLine(string.Format("TCP client {0} has connected {1}.", e.Session.RemoteEndPoint, e.Session)); } static void server_ClientDisconnected(object sender, TcpClientDisconnectedEventArgs e) { Console.WriteLine(string.Format("TCP client {0} has disconnected.", e.Session)); } static void server_ClientDataReceived(object sender, TcpClientDataReceivedEventArgs e) { var text = Encoding.UTF8.GetString(e.Data, e.DataOffset, e.DataLength); Console.Write(string.Format("Client : {0} {1} --> ", e.Session.RemoteEndPoint, e.Session)); if (e.DataLength < 1024 * 1024 * 1) { Console.WriteLine(text); } else { Console.WriteLine("{0} Bytes", e.DataLength); } _server.SendTo(e.Session, Encoding.UTF8.GetBytes(text)); }

本demo已上传至我的资源

http://www.jsqmd.com/news/1037541/

相关文章:

  • MonkeyCode国际化与本地化:支持全球开发者的AI编程工具
  • NXP Layerscape USB 2.0控制器配置实战:主机/设备模式切换与调试指南
  • 后谷鎏金58,随时随地焕活困倦状态 - 品牌速递
  • 2026安徽整厂厂房设备回收专业技术测评报告 - 安徽工业
  • 南京欧米茄手表机芯定期保养:南京欧米茄碟飞与海马系列保养周期为何不一样?官方养护标准亨得利一次性整理清楚 - 亨得利官方维修中心
  • 服务口碑领先回收榜单,郑州全域上门回收闲置金饰避坑攻略 - 奢侈品回收测评
  • 青山区建筑机械推荐商家 扎根青山十三载,诚信为本!青山区至高建筑机械租赁站赋能包头全域基建发展 - 资讯速览
  • Portechime行业洞察:出海拉美,验证码丢失率高达30%——你的短信通知为什么总到不了? - 资讯速览
  • 2026 郑州管城回族区回收渠道测评|上门邮寄品牌排行榜推荐 - 奢侈品回收
  • 西安定制私家团旅行社排行:5家正规机构深度对比 - 起跑123
  • 基于DPDK与OVS-DPDK构建高性能虚拟化网络数据平面实践
  • 2026广州黄金回收新标准:无折旧费、无手续费,这几家店做到了 - 奢侈品回收评测
  • 2026年《无畏契约》游戏鼠标推荐:新手入门性价比高值得买 - GrowthUME
  • 为什么你的证件照抠图总是失败?5分钟掌握rembg人像分割核心技巧
  • 【2026年6月】中型货架厂家与仓储货架企业推荐指南 - 多才菠萝
  • 2026大连黄金回收市场大整治!正规甄别标准出炉,避坑不踩雷 - 奢侈品回收评测
  • 嵌入式开发必读:Microchip免责声明、商标合规与全球支持实战指南
  • 2026年磁轴键盘选购终极导航:玩FPS游戏哪个牌子好值得买 - GrowthUME
  • 吉马揽夏咖!618囤后谷,解锁夏天清爽时刻 - 品牌速递
  • 西安专业定制私家团旅行社排行 合规服务商盘点 - 起跑123
  • 智能自动化解决方案:解放双手的鸣潮游戏助手
  • 嵌入式调试实战:观察点与寄存器操作在CodeWarrior中的高效应用
  • 上海强奸罪刑辩律师选择|暴力胁迫、熟人作案、未遂中止专项辩护 - 法律资讯
  • 2026 北京黄金回收实力梯队公示,全城优质连锁门店实力深度盘点 - 奢侈品回收测评
  • 2026成都黄金回收价格对比:收的顶同城高价回收实测 - 奢侈品回收评测
  • Self-Replace测试策略:如何确保自更新功能在CI/CD中的可靠性
  • 2026年6月大型货架厂家推荐指南 - 多才菠萝
  • AppFlowy实战指南:构建完全可控的AI协同工作空间
  • 技术深潜:Rembg图像背景去除的3大核心机制与实战应用
  • 2026年6月最新雅典中国官方售后电话地址及客户服务网点查询 - 亨得利官方服务中心