C# 实现超大文件传输、断点续传等功能
文章目录
- 一、说明
- 二、程序集源码
- 2.1 源码位置
- 2.2 说明文档
- 三、安装
- 四、特点
- 1.1 文件传输协议兼容性
- 1.2 与FTP相比
- 1.3 功能亮点
- 四、创建服务器
- 五、创建客户端
- 六、总结
文章目录
- 一、说明
- 二、程序集源码
- 2.1 源码位置
- 2.2 说明文档
- 三、安装
- 四、特点
- 1.1 文件传输协议兼容性
- 1.2 与FTP相比
- 1.3 功能亮点
- 四、创建服务器
- 五、创建客户端
- 六、总结
一、说明
经常有小伙伴在开发控制台、winform、WPF等C/S软件时,会有文件传输的需求。正好RRQMSocket.RPC完美支持这个,所以给大家介绍一波。
二、程序集源码
2.1 源码位置
- Gitee
- Github
2.2 说明文档
文档首页
三、安装
Nuget安装RRQMSocket.RPC
即可,具体步骤详看链接博客。
VS、Unity安装和使用Nuget包
四、特点
1.1 文件传输协议兼容性
RRQM文件传输使用的是特殊传输协议,与FTP,HTTP等协议完全不兼容,所以如果使用文件传输,则服务器与客户端必须均使用RRQM组件。
1.2 与FTP相比
因为RRQM使用的是特殊协议,所以性能、功能上要远强于FTP,且搭建简单,支持多通道传输等。
1.3 功能亮点
- 简单易用。
- 多线程处理。
- 高性能,实测传输速度可达1000Mb/s。
- 超简单的传输限速设置,1k-10Gb 无级调节。
- 超简单的传输速度、传输进度获取。
- 随心所欲的暂停、继续、停止传输。
- 系统化的权限管理,让敏感文件只允许私有化下载。
- RPC交互,让客户端和服务器交流不延迟。
- 基于事件驱动,让每一步操作尽在掌握。
- 超简单的断点续传设置,为大文件传输保驾护航。
- 已经上传的文件,再次上传时,可实现快速上传。
- 极少的GC释放。
演示: 可以看到,下图正在上传一个Window的系统镜像文件,大约4.2Gb,传输速度已达到800Mb/s,GC基本上没有释放,性能非常强悍(中间有稍微停顿,因为程序在获取文件MD5值)。
四、创建服务器
static void Main(string[] args)
{TcpTouchRpcService service = GetService();service.Logger.Message("服务器成功启动");Console.ReadKey();
}static TcpTouchRpcService GetService()
{var service = new RRQMConfig()//配置 .SetListenIPHosts(new IPHost[] { new IPHost(7789) }).SetMaxCount(10000).SetThreadCount(100).SetSingletonLogger(new LoggerGroup(new ConsoleLogger(), new FileLogger())).SetVerifyToken("File")//连接验证口令。.BuildWithTcpTouchRpcService();//此处build相当于new TcpTouchRpcService,然后Setup,然后Start。service.Handshaked += (client, e) =>{client.Logger.Message($"有客户端成功验证,ID={client.ID}");};service.Disconnected += (client, e) =>{client.Logger.Message($"有客户端断开,ID={client.ID}");};service.FileTransfering += (client, e) =>{//有可能是上传,也有可能是下载client.Logger.Message($"有客户端请求传输文件,ID={client.ID},请求类型={e.TransferType},请求文件名={e.FileRequest.Path}");};service.FileTransfered += (client, e) =>{//传输结束,但是不一定成功,需要从e.Result判断状态。client.Logger.Message($"客户端传输文件结束,ID={client.ID},请求类型={e.TransferType},文件名={e.FileRequest.Path},请求状态={e.Result}");};return service;
}
五、创建客户端
static void Main(string[] args)
{TcpTouchRpcClient client = new RRQMConfig().SetRemoteIPHost("127.0.0.1:7789").SetVerifyToken("File").BuildWithTcpTouchRpcClient();client.FileTransfering += (client, e) =>{//有可能是上传,也有可能是下载client.Logger.Message($"服务器请求传输文件,ID={client.ID},请求类型={e.TransferType},文件名={e.FileInfo.FileName}");};client.FileTransfered += (client, e) =>{//传输结束,但是不一定成功,需要从e.Result判断状态。client.Logger.Message($"服务器传输文件结束,ID={client.ID},请求类型={e.TransferType},文件名={e.FileInfo.FileName},请求状态={e.Result}");};client.Logger.Message("连接成功");//第一个参数是请求路径,第二个是保存路径。FileRequest fileRequest = new FileRequest(@"D:\System\Windows.iso", $@"Windows.iso");fileRequest.Flags = TransferFlags.BreakpointResume;//尝试断点续传,使用断点续传时,会验证MD5值FileOperator fileOperator = new FileOperator();//实例化本次传输的控制器,用于获取传输进度、速度、状态等。fileOperator.Timeout = 60 * 1000;//当传输大文件,且启用断点续传时,服务器可能会先计算MD5,而延时响应,所以需要设置超时时间。//此处的作用相当于Timer,定时每秒输出当前的传输进度和速度。LoopAction loopAction = LoopAction.CreateLoopAction(-1, 1000, (loop) =>{if (fileOperator.Result.ResultCode != ResultCode.Default){loop.Dispose();}client.Logger.Message($"进度:{fileOperator.Progress},速度:{fileOperator.Speed()}");});loopAction.RunAsync();Metadata metadata = new Metadata();//传递到服务器的元数据metadata.Add("1", "1");metadata.Add("2", "2");//此方法会阻塞,直到传输结束,也可以使用PullFileAsyncIResult result = client.PullFile(fileRequest, fileOperator, metadata);client.Logger.Message(result.ToString());Console.ReadKey();
}
六、总结
实际上,文件传输功能,在客户端之间也可以直接传输,服务器也可以直接向客户端主动Pull、Push文件。而且,对于TouchRpc而言,文件传输也仅仅是的其中一个功能而已,更多的功能请在说明文档获取。
C# 实现超大文件传输、断点续传等功能相关推荐
- 区块链亲民应用场景大猜想 第一次或将献给超大文件传输
区块链亲民应用场景大猜想 第一次或将献给超大文件传输 提及区块链,相信大部分人既熟悉又陌生,熟悉是因为比特币这些年的跌宕起伏,让人蠢蠢欲动却又望而生畏:陌生是因为这是一个全新的东西,并没有走进寻常百姓 ...
- NC工具—文件传输shell获取功能
NC工具-文件传输&shell获取功能 前言:此文主要对NC(NETCAT)工具的文件传输和SHELL获取功能进行学习记录,不对工具简介和基本功能进行赘述,可参考我的另一篇文章Web安全工具- ...
- 大文件上传服务器、支持超大文件HTTP断点续传实践总结
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/ababab12345/ article/details/80490621 最近由于笔者所在的研发集团产品需要,需要支持高性能的 ...
- 大文件上传服务器:支持超大文件HTTP断点续传的实现办法
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/ababab12345/a ...
- 如何测试微信文件传输的这个功能,说出测试点,还有测试类型,以及测试用例
我们在测试任何软件的一些功能之前都应该先把整体的流程梳理一遍. 梳理完成之后很轻而易举的就能说出里面的测试点 第一,点击文件传输,检查文件传输页面的展示 检查是否正常弹出文件选择页面并且对应的路径文件 ...
- php文件断点续传,php超大文件及断点续传下载函数
最近导出订单信息的时候出现一个php内存溢出的问题,原因是文件在下载的时候读取生成的临时文件过大,php内存无法容纳,开始是想更改php内存限制,但不是长久之计,于是就想到了把文件分次读取,并下载的方 ...
- 超大文件传输解决方案
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- 易语言通过服务器发送文件,易语言局域网文件传输带聊天功能例程
这是我大约在半年以前的作品,但是当时由于一些原因并没有完成.算是个半成品,有兴趣的可以下载来研究一下 .版本 2 .支持库 eAPI ' 源码例程来自亦行(yx)博客,由yx编写发布.如有转载请注明来 ...
- 大文件传输软件的优势有哪些?-镭速传输
互联网时代,大数据传输是企业面临的必不可免的问题,可以选择传统的FTP.网盘等方式来传输,对于小型文件或许是有优势的:但是对于大型文件数据的话,也许会出现传输速度慢,数据不可靠的情况,极大的影响了企业 ...
最新文章
- Java 线程 知识
- 助动词有哪些 do does did,本身不能单独做谓语需要与主要动词一起做谓语 情态动词must can need
- binder-JAVA层机制
- CSS添加多个背景图片
- MySql按字段分组取最大值记录
- 蓝桥杯练习系统 —— 题解目录
- python tkinter实例_python绘制一个图形示例源码(tkinter)
- GCC选项_-Wl,-soname 及 DT_NEEDED 的解释
- 8.1.1使用BlockingQueue和ArrayBlockingQueue
- 钉钉日志范文100篇_工作日志应该怎么写?——以钉钉日报模板举例告诉你
- 女主学数学男主计算机,5本女主是高智商学霸大佬的现言,她十项全能,马甲无数,男主全程无条件宠妻...
- 关于安装KVM后不会出现/dev/kvm设备的问题
- WebSocket实现聊天功能
- Java多线程入门一
- 【转载 | 强化学习】Curriculum Learning和Self-paced Learning的相关知识及应用
- 深入理解LayoutInflater.inflate()
- 动力节点【CRM客户管理系统】笔记1.简介、技术架构、软件开发生命周期、CRM核心业务介绍
- VMware14详细安装带软件
- 服务注册与发现-全搞懂
- 详解如何使用VS code搭建JavaScript环境(适合小白)
热门文章
- 骑士放置 最大独立集
- A-star算法自学
- 教你识别什么是一年工作经验by小新
- NTP和Crontab
- php如何放照片,如何在PHP会话中存储照片上传?
- 【推荐系统】{2} —— 基于物品的协同过滤算法
- 基于高并发的数据采集器
- MATLAB--数字图像处理 计算图像链码及其相似多边形
- 不错的站长工具网址(不断收集中....)
- 代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II