CowBoy.Sockets的源码介绍,及搭建一个简单的网络服务器的过程,详细附源码 我们在工作中肯定会遇到网络通信方便的软件需要维护和开发不管是CC#java中原生的Socket我们可以写过。我们都知道定义一套完整的Socket通讯服务端和客户端以及网络通讯的协议是一件很麻烦的事情而今天要介绍的Cowboy.Sockets开源框架帮助我们搭建好了通讯的服务端和客户端同时网络通讯中所使用的数据协议Cowboy.Sockets也帮我们制定好了一个框架方便了我们后续开发提高了程序员们的开发效率。github地址https://github.com/ninenines/cowboy1.CowBoy源码介绍本篇我们主要介绍CowBoy.Sockets的源码结构及搭建一个简单的网络服务器的过程。可以看到搭建Tcp的网络服务主要用到源码Tcp目录下的Framing 和 Server部分这里我们采用APM方式。APM 方式TcpSocketServerTcpSocketServer 的实现是基于 .NET Framework 自带的 TcpListener 和 TcpClient 的更进一步的封装采用基于 APM 的 BeginXXX 和 EndXXX 接口实现。TcpSocketServer 中的 Accept Loop 指的就是BeginAccept - EndAccept- BeginAccept - EndAccept - BeginAccept - ...每一个建立成功的 Connection 由 TcpSocketSession 来处理所以 TcpSocketSession 中会包含 Read LoopBeginRead - EndRead - BeginRead - EndRead - BeginRead - ...而Framing文件夹中的内容是来定义我们在通讯过程中所发送的消息结构的定义组包解包等以及过滤。2.新建CowBoyDemo服务端工程2.1新建.net解决方案新建类库项目Cowboy.Socket将源码中BufferTcp中的源码拷贝到项目如下2.2新建test控制台项目用于测试代码非常简单a)new TcpSocketServer(5555, config);b)监听TcpSocketServer类暴露的ClientConnectedClientDisconnectedClientDataReceived三个事件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已上传至我的资源
💡
读完这篇文章,你可以带走什么

本文来自编程新知一线开发与建站实战沉淀:讲清原理、给出可复现步骤、标注避坑要点。看完后可以直接在你的项目或网站中落地验证。

编程新知内容团队
一线开发 · 建站实施 · 持续更新
由资深前端工程师、后端架构师与建站实施人员共同维护,坚持"真实案例 + 完整步骤 + 避坑指南"的内容准则。如果你在落地中遇到问题,欢迎联系我们交流。

想把这套方案用到自己的项目上?

编程新知提供技术答疑与网站建设一站式服务,欢迎联系我们获取针对性建议。

联系工程师
📚

系统学习该技术

进入对应栏目,从基础到进阶完整学习,配套案例与避坑指南。

前往栏目 →
🏗️

需要落地实施

企业建站、SEO 优化、服务器部署等需求,交给工程师一步到位。

了解服务 →
💬

还有疑问

技术难题或方案咨询,联系编程新知获取一对一的专业建议。

联系我们 →