zoukankan      html  css  js  c++  java
  • 介绍开源的.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)

                {

                }

            }

  • 相关阅读:
    SAP扫盲系列之二:SAP ABAP应用服务器的组成部分
    SAP扫盲系列之一:什么是SAP系统和应用服务器
    SAP CRM中间件下载时,为什么有时候会生成一个奇怪的BDOC容器
    SAP Cloud for Customer ABSL的一些优化
    How to test Delta download in CRM Side
    SAP CRM中间件下载时数据库表CRMATAB为空的处理方法
    如何关闭SAP CRM中间件的delta download方式
    SAP CRM Fiori应用冗余round trip的原因分析
    SAP CRM WebClient UI上以html格式显示note的问题讨论
    微信授权登录
  • 原文地址:https://www.cnblogs.com/Jeely/p/10971898.html
Copyright © 2011-2022 走看看