首先,对于大家而言,想必对网络传输并不陌生,因为我们每天都在下载“文件”。嘻嘻!!!但是如果让我们自己写一个网络文件传输的程序,估计大家都傻眼了,今天小编就给大家以最简单的方式,让C#初学者能够快速开发出实用的Socket文件传输程序。
温馨提示:在看本篇之前首先得有socket编程,也就是能收发消息就行。
准备好了以上工具,我们就开始吧!
首先我们先来介绍一下该程序集的一些功能
1.解决了95%的Tcp黏包的问题(其实理论上是100%,谦虚!!)
2. 服务器单线程托管客户端,从而可以实现同时连接上万的客户端。
3. 可以发送和接收简单文本以及数据对象(凡是可序列化的类都可以)
4. 可以发送和接收各种文件,支持断点传输,多通道下载,多队列下载。快速上传等
5. 服务器可以设置客户端的连接账号和密码(类似于ftp服务器)
6. 服务器支持多种工作模式以对应不同的高并发(后面会讲到)
7. 可以适应于各种老机器(有缓存区大小设置)
8. 下载、上传速度显示,进度显示。
9. 服务器设置最大上传速度,最大下载速度。
10. 可以长连接进行数据交换,也可以进行短连接
更新内容:
更新内容:
更新内容:
1.客户端增加了传输数据对象并等待返回的方法,该方法可以异步调用,而且不会出现返回数据混乱的现象。
2.开放所有的序列化,反序列化方法,可供使用者自定义序列化传输类型
3.增加数据加密方法,但是由于性能原因,并没有在传输数据时默认开启,使用者可以先调用加密方法进行加密,然后再传输。
服务器学习版和专业版功能对比
功能 | 学习版 | 专业版 |
---|---|---|
连接客户端 | √ | √ |
事件触发 | √ | √ |
上传文件 | √ | √ |
下载文件 | √ | √ |
上传数据对象 | √ | √ |
下载数据对象 | √ | √ |
网速显示 | √ | √ |
网速限制 | √ | √ |
是否适用老机器 | √ | √ |
队列下载文件 | √ | √ |
设置连接账号和密码 | × | √ |
设置服务器工作模式 | × | √ |
使用简单客户端和服务器 | × | √ |
文件下载,上传的断点续传功能 | × | √ |
使用时间限制 | √ | × |
工作时是否联网 | × | × |
高稳定性 | √ | √ |
能否使用后续更新版本 | √ | √ |
能否根据自身业务,进行个性化定制功能 | × | √ |
在联网的情况下搜索“RRQMSocketFramework”,如果版本较低或者是破解版的话,就去Nuget官方网站自行下载,然后自行引用。
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、客户端上传
程序集基本原理就这些,接下来再给大家看看关于本程序集的高级操作!!!!!!!
多线程--------------指每链接一个客户端,就会创建一个新线程。其优点是可以很快速地响应客户端请求。缺点是客户端数量不能太多,不然服务器吃不消,一般适用于繁重的数据交换的情况,比如:客户端经常会下载文件等情况。
单线程--------------不管链接多少客户端,始终使用一个线程进行数据处理,其优缺点与多线程恰好相反。适用于多连接,高并发,单数据交换较小的情况。
用户自定义--------------设置线程管理客户端数量,意为一个线程管理的最大客户端数。当该线程管理的客户端数为0的时候会退出该线程。(温馨提示:每个线程都是满负荷在运行,所以尽量控制总线程数,不宜太多)
单次循环50000次(在一台电脑测试时,短时间内最好不要超过六万,以免占用完所有端口)连接并发送数据,仅用8.9s,使用内存仅60M(WPF程序,本身就耗内存)
单次循环60次连接并发送数据,耗时19ms.
在本地网络中,单次访问服务器并等待信息返回,用时不足1ms
简单服务器和客户端的意义:
对于项目中,文中所提到的文件传输类,显然就显得冗余了,Tcp Socket建立连接本就需要时间,外加文件传输类中还需要验证账号,密码,所以明显不适合单次连接传输数据。而直接使用Socket,又觉得tcp粘包问题难以解决,而且使用复杂。所以使用简单服务器和客户端,就能完美解决该问题。既有文件传输类的便捷,又有Socket 的性能。
教程到这里也就基本结束了,但是这个程序集所展示的能力却远不止这些,比如上传功能,多客户端并发,多文件队列下载,多通道下载同一文件等等,各位小伙伴结合事件,就能做出各种各样的东西。如果还有小伙伴没看懂文章内容的话,就点击链接,直通B站视频,里面有关于这个程序集的介绍。也可以看看技术文档下载 在线技术文档。
此外也有一个应用案例案例介绍
当然如果还又什么不明白的,可以私信小编哦,也可以加Q505554090