qt实现基于FTP文件存储系统实现多线程上传,多文件下载

github:https://github.com/xiaofengyun/FTP-FILE-transporthttps://github.com/xiaofengyun/FTP-FILE-transport.git无线网络下基于FTP文件存储系统运行环境如下:开发平台:Windows10(客户端),Linux(服务端)开发环境:QtCreator,Centos7编译环境:G ,GDB,qma...

qt实现基于FTP文件存储系统实现多线程上传,多文件下载

github:https://github.com/xiaofengyun/FTP-FILE-transport

� � � � � � �https://github.com/xiaofengyun/FTP-FILE-transport.git

无线网络下基于FTP文件存储系统运行环境如下:
开发平台:Windows 10(客户端),Linux(服务端)
开发环境:Qt Creator,Centos 7
编译环境:G ,GDB,qmake
运行环境:Qt 5.5.1,Centos 7

多线程上传的逻辑:

选择完一个文件后,通过偏移文件指针lseek()得到文件的size。接下来将大文件按照一定的方法拆分,首先,先比较文件的大小与切片大小,切片大小是一个定值。如果文件的大小小于切片的大小,那么不必进行多线程上传,单线程就可以了。当需要多线程上传的时候,首先计算出线程个数,通过用size/切片大小和size%切片大小的方式计算出需要的线程数。接下来便是传输文件,使用read()函数按字节去读取文件,每次读取一定的字节数到一个缓冲区。然后便是加标志位。犹豫线程是并发执行的,无法预测哪一个线程会首先完成传输,这会对文件的合并差生巨大的影响,所以必须加上标志位,判断数据片段是属于哪一个位置的。在缓冲区的前两个字节加上线程ID作为标志位,然后将读取的文件数据凭借到缓冲区后面,这样便组成了一个数据包,每个线程将这个数据包发送给服务端,然后自行关闭。

多文件下载:

为了实现多文件同时下载,采用了多客户端程序连接服务端的方式。前面提到过,服务端可以承受多客户端的连接,所以当有多个文件去下载时,表面上是由一个用户发出的请求,在内部实现时,模拟多用户去下载的过程。

运行截图:

代码在git里面,需要借鉴的可以看。代码完全是本人自己的想法,如有不对或者错误请指正,交流加QQ:965829642.

源文地址:https://www.guoxiongfei.cn/csdn/7528.html