輕量級C#網路通訊元件StriveEngine —— C/S通訊開源demo(附原始碼)
private ITcpServerEngine tcpServerEngine; private void button1_Click(object sender, EventArgs e) { try { //初始化並啟動服務端引擎(TCP、文字協議) this.tcpServerEngine = NetworkEngineFactory.CreateTextTcpServerEngine(int.Parse(this.textBox_port.Text), new DefaultTextContractHelper("\0"));
this.tcpServerEngine.ClientCountChanged += new CbDelegate<int>(tcpServerEngine_ClientCountChanged); this.tcpServerEngine.ClientConnected += new CbDelegate<System.Net.IPEndPoint>(tcpServerEngine_ClientConnected); this.tcpServerEngine.ClientDisconnected += newCbDelegate<System.Net.IPEndPoint>(tcpServerEngine_ClientDisconnected); this.tcpServerEngine.MessageReceived += new CbDelegate<IPEndPoint, byte[]>(tcpServerEngine_MessageReceived); this.tcpServerEngine.Initialize(); this.button1.Enabled = false;this.textBox_port.ReadOnly = true; this.button2.Enabled = true; } catch (Exception ee) { MessageBox.Show(ee.Message); } } void tcpServerEngine_MessageReceived(IPEndPoint client, byte[] bMsg) { string msg = System.Text.Encoding.UTF8.GetString(bMsg); //訊息使用UTF-8編碼 msg = msg.Substring(0, msg.Length - 1); //將結束標記"\0"剔除 this.ShowClientMsg(client, msg); } void tcpServerEngine_ClientDisconnected(System.Net.IPEndPoint ipe) { string msg = string.Format("{0} 下線", ipe); this.ShowEvent(msg); } void tcpServerEngine_ClientConnected(System.Net.IPEndPoint ipe) { string msg = string.Format("{0} 上線" ,ipe); this.ShowEvent(msg); } void tcpServerEngine_ClientCountChanged(int count) { this.ShowConnectionCount(count); } private void ShowEvent(string msg) { if (this.InvokeRequired) { this.BeginInvoke(new CbDelegate<string>(this.ShowEvent), msg); } else { this.toolStripLabel_event.Text = msg; } } private void ShowClientMsg(IPEndPoint client, string msg) { if (this.InvokeRequired) { this.BeginInvoke(new CbDelegate<IPEndPoint,string>(this.ShowClientMsg),client, msg); } else { ListViewItem item = new ListViewItem(new string[] { DateTime.Now.ToString(), client.ToString(), msg }); this.listView1.Items.Insert(0, item); } } private void ShowConnectionCount(int clientCount) { if (this.InvokeRequired) { this.BeginInvoke(new CbDelegate<int>(this.ShowConnectionCount), clientCount); } else { this.toolStripLabel_clientCount.Text = "線上數量: " + clientCount.ToString(); } } private void comboBox1_DropDown(object sender, EventArgs e) { List<IPEndPoint> list = this.tcpServerEngine.GetClientList(); this.comboBox1.DataSource = list; } private void button2_Click(object sender, EventArgs e) { try { IPEndPoint client = (IPEndPoint)this.comboBox1.SelectedItem; if (client == null) { MessageBox.Show("沒有選中任何線上客戶端!"); return; } if (!this.tcpServerEngine.IsClientOnline(client)) { MessageBox.Show("目標客戶端不線上!"); return; } string msg = this.textBox_msg.Text + "\0";// "\0" 表示一個訊息的結尾 byte[] bMsg = System.Text.Encoding.UTF8.GetBytes(msg);//訊息使用UTF-8編碼 this.tcpServerEngine.SendMessageToClient(client, bMsg); } catch (Exception ee) { MessageBox.Show(ee.Message); } }
相關推薦
輕量級C#網路通訊元件StriveEngine —— C/S通訊開源demo(附原始碼)
private ITcpServerEngine tcpServerEngine; private void button1_Click(object sender, EventArgs e) { try { //初
C#輕量級通通訊元件StriveEngine —— C/S通訊開源demo(2) —— 使用二進位制協議 (附原始碼)
前段時間,有幾個研究的朋友對我說,ESFramework有點龐大,對於他們目前的專案來說有點“殺雞用牛刀”的意思,因為他們的專案不需要檔案傳送、不需要P2P、不存在好友關係、也不存在組廣播、不需要伺服器均衡、不需要跨伺服器通訊、甚至都不需要使用UserID,只要客戶端能與服務端進行簡單的穩定高效的通訊就可以了
一個簡單的用ASP.NET/C#開發的元件化Web應用程式(附原始碼)
==============================================================================1)建立一個類來處理使用者登入,將該類編譯成一個裝配件(assembly),併發布到站點的bin目錄下。========
C#設計模式02-抽象工廠模式(附原始碼)
抽象工廠模式是所有工廠模式中最為抽象的模式,是抽象程度最高的模式,也是最難理解的一種工廠模式。 現在舉一個生活中的案例來
(轉)C# 獲取漢字的拼音首字母和全拼(含原始碼)[A]
https://blog.csdn.net/younghaiqing/article/details/62417269 C# 獲取漢字的拼音首字母 一種是把所有中文字元集合起來組成一個對照表;另一種是依照漢字在Unicode編碼表中的排序來確定拼音的首字母
自然語言處理之:c++中文分詞(附原始碼)
githup地址:https://github.com/jbymy 一、簡介 中文分詞是地然語言處理中的最基礎的環節,到目前為止已經有不少優秀的分詞工具的出現,如“中科院分詞”,“結
C#實現視訊會議系統 GGMeeting(附原始碼)
前段時間做了個線上教育培訓的專案,與視訊會議比較類似,所以了,我打算像 廣域網即時通訊系統GG(QQ高仿版)一樣,寫一個視訊會議系統並把實現的原理和原始碼都分享出來,讓有興趣的朋友可以參考下。繼承GG的名稱,我把這個視訊會議系統命名為GGMeeting,目前版本為
原理和C++實現的演示程式(附原始碼)
http://blog.csdn.net/mahabharata_/article/details/71856907 大二的時候,曾受老師所託,用C++而不是OpenGL去寫B樣條曲線的教學程式。時隔一年,發現原始碼找不見了,所以重新寫了一遍,也完善了部分功能,順
基於C#的內網穿透學習筆記(附原始碼)
如何讓兩臺處在不同內網的主機直接互連?你需要內網穿透! 上圖是一個非完整版內外網通訊圖由內網端先發起,內網裝置192.168.1.2:6677傳送資料到外網時候必須經過nat會轉換成對應的外網ip+埠,然後在傳送給外網裝置,
C#推流RTMP,攝像頭、麥克風、桌面、音效卡(附原始碼)
這段時間一直都在研究推流的技術,經過斷斷續續將近兩個月的摸索實踐,終於能穩定地推流了。 這個demo的主要功能就是將採集到的攝像頭或桌面的視訊、以及麥克風或音效卡的音訊資料推到Nginx-RTMP伺服器上,再由Web瀏覽器去拉流並播放。 接下來介紹
Android跨程序通訊AIDL詳解(附原始碼)
概述 AIDL:Android Interface Definition Language,即Android介面定義語言,記住,它是一門語言,設計它的目的就是為了實現跨程序通訊,我們知道Android的每一個程序都執行在獨立的記憶體中,程序之間程式碼是不能愉快
獨家 | 初學者的問題:在神經網路中應使用多少隱藏層/神經元?(附例項)
作者:Ahmed Gad翻譯:蔣雨暢校對:李海明本文約2400字,建議閱讀8分鐘。本文將通過兩個
半透明視窗中顯示標準控制元件(控制元件與文字不透明)的實現方案(附原始碼)
原文 http://blog.csdn.net/harbinzju/article/details/7907127 和大家分享一下在半透明視窗中顯示標準控制元件的實現方案。通過層疊視窗可以簡單實現半透明與不規則形狀視窗的效果,但在其上顯示標準控制元件(控制元件與文字不
生成對抗網路GAN---生成mnist手寫數字影象示例(附程式碼)
Ian J. Goodfellow等人於2014年在論文Generative Adversarial Nets中提出了一個通過對抗過程估計生成模型的新框架。框架中同時訓練兩個模型:一個生成模型(generative model)G,用來捕獲資料分佈;一個判別模型(discri
基於stm32的自定義HID裝置開發與上位機通訊實現(附原始碼)
現在主流的安卓手機資料連線線,Mini-usb、Micro-usb,Type-c,產品追隨主流,非聯網裝置,摒棄ST-LINK、JLINK,直接用usb資料傳輸升級。主要實現與HID裝置的通訊即人機互動。本文主要介紹了HID裝置的下位機通訊連線與上位機裝置識別。 下位機:
Qt一步一步實現外掛通訊(附原始碼)
前一章已經實現了主程式呼叫載入外掛功能,這一章描述主程式和外掛間通訊功能 說道Qt的通訊必須要了解訊號和槽的機制原理,這裡不做論述,不清楚的同學去看看訊號和槽機制 不廢話直接上步驟,在上一章的基礎下進行修改 第一步:在外掛中定義一個接收槽 1 2 3
Linux 下 C 網路程式設計之 多執行緒通訊 例項
簡單示例,有不對的地方,歡迎指點。 伺服器端 /* ============================================================================ Name : sockThreadServer
關於C#WinForm的datagridview控制元件的使用經驗及技巧收集(持續更新)
怎麼讓DataGridView顯示行號? 方法1: 在Winform窗體中選中datagridview控制元件,在其“RowPostPaint”觸發事件屬性中雙擊自動生成事件函式或者在右側的下拉框中選
C#通過COM元件呼叫C++的程式碼(轉載)
一.通過ALT建立COM元件 1、建立ATL Project 步驟1:建立一個解決方案。 步驟2:在 該解決方案中,新建一個 vc++ 的 ATL 專案。見下圖 選擇Dynamic-link library(DLL) 2、向工程中新增ATL物件
C#進階系列——一步一步封裝自己的HtmlHelper元件:BootstrapHelper(三:附原始碼)
前言:之前的兩篇封裝了一些基礎的表單元件,這篇繼續來封裝幾個基於bootstrap的其他元件。和上篇不同的是,這篇的有幾個元件需要某些js檔案的支援。 BootstrapHelper系列文章目錄 一、NumberBoxExtensions NumberBoxExtensions是一個基於boot