日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 介绍开源的.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)

? ? ? ? ? ? {


? ? ? ? ? ? }

? ? ? ? }

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


.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

總結

以上是生活随笔為你收集整理的介绍开源的.net通信框架NetworkComms的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。