C#Socket高性能,高併發框架,可進行大文件傳輸,斷點續傳,數據對象傳遞等功能

首先,對於大家而言,想必對網絡傳輸並不陌生,因爲我們每天都在下載“文件”。嘻嘻!!!但是如果讓我們自己寫一個網絡文件傳輸的程序,估計大家都傻眼了,今天小編就給大家以最簡單的方式,讓C#初學者能夠快速開發出實用的Socket文件傳輸程序。
溫馨提示:在看本篇之前首先得有socket編程,也就是能收發消息就行。

所需工具:

  1. VS2017及以上版本
  2. Internet網絡
  3. 電腦一臺
  4. 基礎編程人員一名
  5. 還有必不可少的程序集。RRQMSocketFramework.dll(可以直接可以去Nuget下載)

開始

準備好了以上工具,我們就開始吧!
首先我們先來介紹一下該程序集的一些功能

1.解決了95%的Tcp黏包的問題(其實理論上是100%,謙虛!!)
2. 服務器單線程託管客戶端,從而可以實現同時連接上萬的客戶端。
3. 可以發送和接收簡單文本以及數據對象(凡是可序列化的類都可以)
4. 可以發送和接收各種文件,支持斷點傳輸,多通道下載,多隊列下載。快速上傳等
5. 服務器可以設置客戶端的連接賬號和密碼(類似於ftp服務器)
6. 服務器支持多種工作模式以對應不同的高併發(後面會講到)
7. 可以適應於各種老機器(有緩存區大小設置)
8. 下載、上傳速度顯示,進度顯示。
9. 服務器設置最大上傳速度,最大下載速度。
10. 可以長連接進行數據交換,也可以進行短連接


2020.5.17 上線版本(版本號:4.1.3)

更新內容:

  1. 取消文件類的速度限制
  2. 可以設置最大下載速度和上傳速度
  3. 優化數據包處理邏輯,降低申請內存的頻率
  4. 分類學習版和專業版,創建獨立的類開銷更小
  5. 取消構造函數傳參,直接由屬性賦值傳遞
  6. 完美兼容Winform組件式開發,對於這些工具類,您可以像設計Button一樣,直接設置其參數,相對應的事件也可以像Button的Click事件一樣,通過雙擊註冊。當然也不影響直接使用類。

2020.5.18 緊急更新(版本號:4.1.5)

更新內容:

  1. 對應用戶要求,加入禁用心跳服務器屬性
  2. 由於失誤,更改了命名空間,現已調回。

2020.6.24更新(版本號:4.2.5)

更新內容:
1.客戶端增加了傳輸數據對象並等待返回的方法,該方法可以異步調用,而且不會出現返回數據混亂的現象。
2.開放所有的序列化,反序列化方法,可供使用者自定義序列化傳輸類型
3.增加數據加密方法,但是由於性能原因,並沒有在傳輸數據時默認開啓,使用者可以先調用加密方法進行加密,然後再傳輸。


更新圖示:
在這裏插入圖片描述
在這裏插入圖片描述


服務器學習版和專業版功能對比

功能 學習版 專業版
連接客戶端
事件觸發
上傳文件
下載文件
上傳數據對象
下載數據對象
網速顯示
網速限制
是否適用老機器
隊列下載文件
設置連接賬號和密碼 ×
設置服務器工作模式 ×
使用簡單客戶端和服務器 ×
文件下載,上傳的斷點續傳功能 ×
使用時間限制 ×
工作時是否聯網 × ×
高穩定性
能否使用後續更新版本
能否根據自身業務,進行個性化定製功能 ×

第一步 程序集引用

在這裏插入圖片描述
在聯網的情況下搜索“RRQMSocketFramework”,如果版本較低或者是破解版的話,就去Nuget官方網站自行下載,然後自行引用。
在這裏插入圖片描述

第二步 引入命名空間

  1. 引入命名空間“RRQMSocket”
  2. 實例化工具類類
    第一個創建的是學習版的實例,具體功能看程序集註釋
    第二個是高級企業版,可以設置賬號,密碼,服務器模式等
            RRQMService service = new RRQMService();
            service.IP = "192.168.1.1";
            service.Port = 1024;
            ResultStatus status = service.BindSocket();
            if (status.Status)
            {
                MessageBox.Show("服務器建立成功");
            }
            RRQMService MainService = new RRQMService(setting);
            MainService.Account = "123";
            MainService.PassWord = "abc";
            MainService.ServerMode = ServerMode.SingleThread;
            MainService.SleepTime = 0;
            MainService.LicenceKey = "許可證需聯繫作者購買,QQ505554090";
            MainService.ReceiveObject += MainService_ReceiveObject;
            MainService.IP = "192.168.43.150";
            MainService.Port = 7789;

            ResultStatus result = MainService.BindSocket();
            if (result.Status)
            {
                this.MesText = "綁定成功";
            }

第三步 創建客戶端實例並連接

            RRQMClient client = new RRQMClient();

            ConfirmSocket confirm = new ConfirmSocket();
            confirm.Account = "123";
            confirm.Account = "abc";
            confirm.TargetIP = "192.168.1.1";
            confirm.TargetPort = 1024;
            confirm.WaitingTime = 1;
            confirm.Flag = "測試連接";
            ResultStatus status = client.Connect(confirm);
            if (status.Status)
            {
                MessageBox.Show("連接成功");
            }
            else
            {
                MessageBox.Show(status.Message);
            }

這四步完成以後,程序集的對象的創建就完成了,接下來看下基本功能實現

事件

事件的綁定服務端和客戶端基本一致,這裏就以客戶端爲例。每個事件都有詳細的註釋
在這裏插入圖片描述
事件裏面的參數信息,以接收文件爲例
在這裏插入圖片描述

發送文本類信息

1、客戶端→服務器
在這裏插入圖片描述
2、服務器→客戶端
在這裏插入圖片描述

客戶端下載,上傳文件

1、客戶端下載
在這裏插入圖片描述
2、客戶端上傳
在這裏插入圖片描述
程序集基本原理就這些,接下來再給大家看看關於本程序集的高級操作!!!!!!!

1. 服務端創建模式

多線程--------------指每鏈接一個客戶端,就會創建一個新線程。其優點是可以很快速地響應客戶端請求。缺點是客戶端數量不能太多,不然服務器喫不消,一般適用於繁重的數據交換的情況,比如:客戶端經常會下載文件等情況。
單線程--------------不管鏈接多少客戶端,始終使用一個線程進行數據處理,其優缺點與多線程恰好相反。適用於多連接,高併發,單數據交換較小的情況。
用戶自定義--------------設置線程管理客戶端數量,意爲一個線程管理的最大客戶端數。當該線程管理的客戶端數爲0的時候會退出該線程。(溫馨提示:每個線程都是滿負荷在運行,所以儘量控制總線程數,不宜太多)

2.各種小設置

  1. 設置服務器接收文件目錄
    在這裏插入圖片描述
  2. 設置客戶端接收文件目錄
    在這裏插入圖片描述
  3. 設置文件下載“斷點續傳”功能
    在這裏插入圖片描述
  4. 設置文件上傳“斷點續傳”功能
    在這裏插入圖片描述

簡單服務器和客戶端性能表現

單次循環50000次(在一臺電腦測試時,短時間內最好不要超過六萬,以免佔用完所有端口)連接併發送數據,僅用8.9s,使用內存僅60M(WPF程序,本身就耗內存)
在這裏插入圖片描述
單次循環60次連接併發送數據,耗時19ms.
在這裏插入圖片描述
在本地網絡中,單次訪問服務器並等待信息返回,用時不足1ms
在這裏插入圖片描述
簡單服務器和客戶端的意義:
對於項目中,文中所提到的文件傳輸類,顯然就顯得冗餘了,Tcp Socket建立連接本就需要時間,外加文件傳輸類中還需要驗證賬號,密碼,所以明顯不適合單次連接傳輸數據。而直接使用Socket,又覺得tcp粘包問題難以解決,而且使用複雜。所以使用簡單服務器和客戶端,就能完美解決該問題。既有文件傳輸類的便捷,又有Socket 的性能。

結束語:

教程到這裏也就基本結束了,但是這個程序集所展示的能力卻遠不止這些,比如上傳功能,多客戶端併發,多文件隊列下載,多通道下載同一文件等等,各位小夥伴結合事件,就能做出各種各樣的東西。如果還有小夥伴沒看懂文章內容的話,就點擊鏈接,直通B站視頻,裏面有關於這個程序集的介紹。也可以看看技術文檔下載 在線技術文檔

此外也有一個應用案例案例介紹

當然如果還又什麼不明白的,可以私信小編哦,也可以加Q505554090

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章