介绍开源的.net通信框架NetworkComms

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sD7O95O/article/details/78097290
Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  开源地址是:https://github.com/MarcFletcher/NetworkComms.Net

networkcomms通讯框架使用简单方便,性能稳定.

 

从github上下载到源码后,需要Visual studio安装nuget 加载相关DLL.

用VS打开解决方案后,删除上图中暂时用不到的项目,然后进行编译

 

networkcomms默认使用protobuf进行数据的序列化. 

下面通过一个简单的例子,使用NetworkComms框架,进行简单的客户端与服务器的通信。

1、新建2个WinForm的项目

 

第一步,是 添加引用,引用2个项目 ,一个是networkcomms通信框架  一个是ProtobufSerializer 。NetworkComms是通信框架,ProtobufSerializer是序列化用的

 

监听代码:

//IP地址和端口
IPEndPoint thePoint = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));  
//开始监听此IP和端口  使用TCP协议
Connection.StartListening(ConnectionType.TCP, thePoint);
客户端连接服务器代码:

//连接信息
connInfo = new ConnectionInfo(txtIP.Text, int.Parse(txtPort.Text));
 //连接服务器
newTcpConnection = TCPConnection.GetConnection(connInfo);
通过上面的几步,客户端就同服务器端取得了联系,NetowrkComms通信框架会自动发送心跳包,保持客户端与服务器端之间的TCP连接.

那么,服务器端与客户端如何通信呢

比如,客户端发起一个请求,服务器端回复一个请求。这就涉及到一个消息类型的概念。

使用networkcomms  通信框架时,客户端发送消息给服务器端是,需要制定当前消息的消息类型,和期待返回的消息类型。服务器端返回消息时,指定客户端期待返回的消息类型。

这样客户端就能获取到响应的返回消息。 

示例: 客户端从服务器获取响应的英文名称

 

客户端代码:

string resMsg = newTcpConnection.SendReceiveObject<string, string>("GetName", "ResName", 5000, listBox1.Text);

  MessageBox.Show("英文名称是:" + resMsg);
GetName 是请求的消息类型  ResName 是期待的返回的消息类型

在服务器端   我们编写代码时,处理 GetName类型的消息时,返回消息类型设定为ResName 即可

如下:

服务器端代码:

private void button1_Click(object sender, EventArgs e)

        {

            //IP地址和端口

            IPEndPoint thePoint = new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text));

            //开始监听此IP和端口  使用TCP协议

            Connection.StartListening(ConnectionType.TCP, thePoint);

            //关联消息类型为GetName的消息的处理方法

            NetworkComms.AppendGlobalIncomingPacketHandler<string>("GetName", IncomingMsgHandle);

            button1.Text = "已经开始监听";

        }

        private void IncomingMsgHandle(PacketHeader header, Connection connection, string msg)

        {

            try

            {

                string resMsg = "";

                if (msg == "星期一")

                    resMsg = "Monday";

                else if (msg == "星期二")

                    resMsg = "Tuesday";

                else if (msg == "星期三")

                    resMsg = "Wednesday";

                else if (msg == "星期四")

                    resMsg = "Thursday";

                else if (msg == "星期五")

                    resMsg = "Friday";

                else if (msg == "星期六")

                    resMsg = "Saturday";

                else if (msg == "星期日")

                    resMsg = "Sunday";

                connection.SendObject("ResName", resMsg);

            }

            catch (Exception ex)

            {

            }

        }

原文地址:https://www.cnblogs.com/Jeely/p/10971898.html