介紹開源的.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)

            {

 

            }

        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM