你的位置:首页 > ASP.net教程

[ASP.net教程]介绍开源的.net通信框架NetworkComms


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)      {      }    }

  示例 源码地址