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

来源:互联网 发布:大屏播放软件 编辑:程序博客网 时间:2024/06/05 08:19

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)

            {


            }

        }

原文地址:http://www.cnblogs.com/csdev/p/5783890.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

阅读全文
0 0
原创粉丝点击