1. 程式人生 > >輕量級C#網路通訊元件StriveEngine —— C/S通訊開源demo(附原始碼)

輕量級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 += new
CbDelegate<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