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.增加数据加密方法,但是由于性能原因,并没有在传输数据时默认开启,使用者可以先调用加密方法进行加密,然后再传输。


更新图示:
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第1张图片
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第2张图片


服务器学习版和专业版功能对比

功能 学习版 专业版
连接客户端
事件触发
上传文件
下载文件
上传数据对象
下载数据对象
网速显示
网速限制
是否适用老机器
队列下载文件
设置连接账号和密码 ×
设置服务器工作模式 ×
使用简单客户端和服务器 ×
文件下载,上传的断点续传功能 ×
使用时间限制 ×
工作时是否联网 × ×
高稳定性
能否使用后续更新版本
能否根据自身业务,进行个性化定制功能 ×

第一步 程序集引用

C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第3张图片
在联网的情况下搜索“RRQMSocketFramework”,如果版本较低或者是破解版的话,就去Nuget官方网站自行下载,然后自行引用。
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第4张图片

第二步 引入命名空间

  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);
            }

这四步完成以后,程序集的对象的创建就完成了,接下来看下基本功能实现

事件

事件的绑定服务端和客户端基本一致,这里就以客户端为例。每个事件都有详细的注释
在这里插入图片描述
事件里面的参数信息,以接收文件为例
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第5张图片

发送文本类信息

1、客户端→服务器
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第6张图片
2、服务器→客户端
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第7张图片

客户端下载,上传文件

1、客户端下载
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第8张图片
2、客户端上传
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第9张图片
程序集基本原理就这些,接下来再给大家看看关于本程序集的高级操作!!!!!!!

1. 服务端创建模式

多线程--------------指每链接一个客户端,就会创建一个新线程。其优点是可以很快速地响应客户端请求。缺点是客户端数量不能太多,不然服务器吃不消,一般适用于繁重的数据交换的情况,比如:客户端经常会下载文件等情况。
单线程--------------不管链接多少客户端,始终使用一个线程进行数据处理,其优缺点与多线程恰好相反。适用于多连接,高并发,单数据交换较小的情况。
用户自定义--------------设置线程管理客户端数量,意为一个线程管理的最大客户端数。当该线程管理的客户端数为0的时候会退出该线程。(温馨提示:每个线程都是满负荷在运行,所以尽量控制总线程数,不宜太多)

2.各种小设置

  1. 设置服务器接收文件目录
    C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第10张图片
  2. 设置客户端接收文件目录
    在这里插入图片描述
  3. 设置文件下载“断点续传”功能
    C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第11张图片
  4. 设置文件上传“断点续传”功能
    在这里插入图片描述

简单服务器和客户端性能表现

单次循环50000次(在一台电脑测试时,短时间内最好不要超过六万,以免占用完所有端口)连接并发送数据,仅用8.9s,使用内存仅60M(WPF程序,本身就耗内存)
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第12张图片
单次循环60次连接并发送数据,耗时19ms.
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第13张图片
在本地网络中,单次访问服务器并等待信息返回,用时不足1ms
C#Socket高性能,高并发框架,可进行大文件传输,断点续传,数据对象传递等功能_第14张图片
简单服务器和客户端的意义:
对于项目中,文中所提到的文件传输类,显然就显得冗余了,Tcp Socket建立连接本就需要时间,外加文件传输类中还需要验证账号,密码,所以明显不适合单次连接传输数据。而直接使用Socket,又觉得tcp粘包问题难以解决,而且使用复杂。所以使用简单服务器和客户端,就能完美解决该问题。既有文件传输类的便捷,又有Socket 的性能。

结束语:

教程到这里也就基本结束了,但是这个程序集所展示的能力却远不止这些,比如上传功能,多客户端并发,多文件队列下载,多通道下载同一文件等等,各位小伙伴结合事件,就能做出各种各样的东西。如果还有小伙伴没看懂文章内容的话,就点击链接,直通B站视频,里面有关于这个程序集的介绍。也可以看看技术文档下载 在线技术文档。

此外也有一个应用案例案例介绍

当然如果还又什么不明白的,可以私信小编哦,也可以加Q505554090

你可能感兴趣的:(笔记)