Networkcomms 是一款C# 語言編寫的TCP/UDP通信框架 作者是英國人 以前是收費的 目前作者已經開源 開源地址是:https://github.com/MarcFletcher/NetworkComms.Net networkcomms通訊框架使用簡單方便,性能穩定. 從github ...
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) { } }
示例 源碼地址