CN112532724A - 一种文件传输系统及其方法 - Google Patents
一种文件传输系统及其方法 Download PDFInfo
- Publication number
- CN112532724A CN112532724A CN202011364674.1A CN202011364674A CN112532724A CN 112532724 A CN112532724 A CN 112532724A CN 202011364674 A CN202011364674 A CN 202011364674A CN 112532724 A CN112532724 A CN 112532724A
- Authority
- CN
- China
- Prior art keywords
- file
- transmission
- data packet
- queue
- type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 230000005540 biological transmission Effects 0.000 title claims abstract description 241
- 238000000034 method Methods 0.000 title claims abstract description 32
- 238000004891 communication Methods 0.000 claims abstract description 7
- 239000000872 buffer Substances 0.000 claims description 54
- 238000012546 transfer Methods 0.000 claims description 9
- 230000006835 compression Effects 0.000 claims description 7
- 238000007906 compression Methods 0.000 claims description 7
- 238000009825 accumulation Methods 0.000 claims description 4
- 238000004806 packaging method and process Methods 0.000 claims description 3
- 230000000977 initiatory effect Effects 0.000 claims 1
- 230000006870 function Effects 0.000 description 23
- 238000010586 diagram Methods 0.000 description 6
- 238000012360 testing method Methods 0.000 description 3
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/06—Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及一种文件传输系统及其方法,该系统包括传输源端和传输目的端,所述传输源端和传输目的端相互通信连接,所述传输源端用于创建小文件队列、大文件队列以及发送数据队列,用于启动多线程任务、发送指定数据包给传输目的端、接收来自传输目的端的回执数据包并进行解析;所述传输目的端用于创建数据合并队列,用于启动多线程任务、接收来自传输源端的指定数据包并进行解析、发送回执数据包给传输源端。与现有技术相比,本发明通过创建不同的安全队列,结合小文件合并数据包、多线程并发任务以及大文件后传数据的方式,能够大大提高文件传输速度、降低传输时间,适用于海量文件传输场景。
Description
技术领域
本发明涉及数据传输技术领域,尤其是涉及一种文件传输系统及其方法。
背景技术
随着云计算、大数据、物联网的发展,用户拥有的数据量呈指数级急剧增长、海量文件也随之产生。由于没有海量文件的专门传输工具,用户目前通常使用FTP、SFTP等文件传输工具进行文件传输,但这种方法存在明显的弊端,FTP、SFTP等传输工具传输文件的方式是一个一个文件排队进行传输,只有在上一个文件传输完毕,下一个文件才能开始进行传输,这在海量小文件和大文件混合场景下,其传输性能非常低下、传输耗时较长、传输速度较慢。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种文件传输系统及其方法,以提高海量文件传输速度、降低传输时间。
本发明的目的可以通过以下技术方案来实现:一种文件传输系统,包括传输源端和传输目的端,所述传输源端和传输目的端相互通信连接,所述传输源端用于创建小文件队列、大文件队列以及发送数据队列,用于启动多线程任务、发送指定数据包给传输目的端、接收来自传输目的端的回执数据包并进行解析;
所述传输目的端用于创建数据合并队列,用于启动多线程任务、接收来自传输源端的指定数据包并进行解析、发送回执数据包给传输源端。
进一步地,所述传输源端通过TCP/IP协议与传输目的端相互通信连接。
进一步地,所述传输源端设置有TCPClient模块、第一线程池模块和第一安全队列模块,所述TCPClient模块与传输目的端连接,用于实现传输源端与传输目的端之间的数据传输;
所述第一线程池模块用于构建第一线程池,以启动传输源端的多线程任务;
所述第一安全队列模块用于创建小文件队列、大文件队列以及发送数据队列。
进一步地,所述传输目的端设置有TCPServer模块、第二线程池模块和第二安全队列模块,所述TCPServer模块与传输源端连接,用于实现传输目的端与传输源端之间的数据传输;
所述第二线程池模块用于构建第二线程池,以启动传输目的端的多线程任务;
所述第二安全队列模块用于创建数据合并队列。
一种文件传输方法,包括以下步骤:
S1、传输源端遍历待传输的目录及文件,并在遍历过程中查看文件属性,根据文件的大小,创建得到小文件队列和大文件队列,其中,小文件队列和大文件队列均用于存放文件路径,大文件队列还用于存放目录的文件路径;
S2、传输源端启动多个小文件发送任务,通过从小文件队列中取元素,以生成第一类型数据包并发送给传输目的端;
传输源端启动多个大文件发送任务,通过从大文件队列中取元素,以生成第二类型数据包并发送给传输目的端;
S3、传输目的端接收来自传输源端的数据包,并对接收的数据包进行解析,若接收的数据包为第一类型数据包,则读取第一类型数据包内的信息,将读取的信息打包成一个数据结构,以创建得到数据合并队列,之后启动多个小文件数据写入任务,完成小文件传输;
若接收的数据包为第二类型数据包,则读取第二类型数据包内的信息,并向传输源端发送包含回执消息的第三类型数据包;
S4、传输源端接收来自传输目的端的第三类型数据包,读取第三类型数据包内的消息,若回执消息为成功,则执行步骤S5,否则输出错误消息、停止传输任务;
S5、传输源端读取第三类型数据包内的信息,若传输的文件类型是目录,则继续执行发送任务,若传输的文件类型为文件,则将该文件路径放入创建的发送数据队列中,之后启动多个大文件数据发送任务,通过从发送数据队列中取出元素,以生成第四类型数据包并发送给出传输目的端;
S6、传输目的端接收来自传输源端的第四类型数据包,通过读取第四类型数据包内的信息,完成大文件传输。
进一步地,所述步骤S2的具体过程为:
传输源端启动多个小文件发送任务,这些任务从小文件队列中取元素,当取出的元素大小累加大于预设阈值时停止,将取出的每个元素的内容读出写入到缓存区,之后将缓存区的位置信息写到Header的存储结构中,并设置消息类型为第一类型,接着把缓存区中的内容压缩产生compress buffer,最后把compress buffer与Header拼接成第一类型数据包发送给传输目的端;
传输源端启动多个大文件发送任务,这些任务从大文件队列中取出元素,每取出一个元素,将该元素的文件类型,文件名称以及文件属性组成一个数据包,并设置消息类型为第二类型,得到第二类型数据包后发送给传输目的端。
进一步地,所述步骤S3的具体过程为:
若接收的数据包为第一类型数据包,则从第一类型数据包中读取文件个数为n,之后循环n次,以读取每个文件的文件名、文件属性、文件在缓存区的偏移、文件在缓存区的长度以及compress buffer,将这些信息打包成一个数据结构,放入数据合并队列中;
之后启动多个小文件写入任务,这些任务从数据合并队列中取出元素,每个元素中包含文件名、文件属性、文件在缓存区的偏移、文件在缓存区的长度以及compressbuffer,将compress buffer解压得到数据缓存,根据文件名以及文件属性,创建对应的文件,根据文件在缓存区的偏移和长度,从缓存区中读取文件内容,并将读取的文件内容写入创建的文件中,完成小文件传输;
若接收的数据包为第二类型数据包,则继续读取文件类型、文件名称和文件属性,若文件类型为目录,则创建对应的目录,若文件类型为文件,则创建对应文件,并保存打开的文件句柄,最后向传输源端发送第三类型数据包,其中,第三类型数据包中的信息包括文件类型、文件名、传输成功标记以及错误消息。
进一步地,所述步骤S4的具体过程为:传输源端接收来自传输目的端的第三类型数据包,读取第三类型数据包内的消息,若传输成功标记对应于成功,则执行步骤S5;若传输成功标记对应于失败,则输出错误消息、停止传输任务。
进一步地,所述步骤S5中传输源端启动多个大文件数据发送任务的具体过程为:
传输源端启动多个大文件数据发送任务,这些任务从发送数据队列中取出元素,每取出一个元素,则读取对应的文件内容,当读取的文件内容达到预设阈值时,则发送一个第四类型数据包给传输目的端,直到所有文件内容发送完毕,其中,第四类型数据包中的信息包括文件路径、数据偏移、缓存长度以及compress buffer。
进一步地,所述步骤S6的具体过程为:
传输目的端从第四类型数据包中读取文件路径、数据偏移、缓存长度以及compress buffer,之后解压compress buffer得到数据缓存,再根据文件路径找到文件句柄,最后将缓存中的数据写入文件中,完成大文件传输。
与现有技术相比,本发明具有以下优点:
一、本发明利用小文件队列存入小文件的文件路径,利用大文件队列存入大文件或目录的文件路径,并结合数据合并队列和发送数据队列,使得小文件能够从传输源端被合并一起传输给传输目的端,使得大文件能够先在传输目的端创建对应的文件、之后再将大文件数据写入传输目的端,从而避免文件需要一个一个排队进行传输,不管在海量小文件场景下、海量大文件场景下还是大小文件混合场景下,都能够保证文件的分类分类有序传输、大大提高海量文件的传输速度、降低传输时间。
二、本发明通过在传输源端和传输目的端分别构建线程池模块,使得传输源端能够启动多个小文件发送任务、多个大文件发送任务以及多个大文件数据发送任务,使得传输目的端能够启动多个小文件数据写入任务,通过多个任务的并发执行,进一步提高海量文件的传输速度、降低传输时间。
附图说明
图1为本发明的系统结构示意图;
图2为本发明的方法流程示意图;
图3为实施例中第一类型数据包的结构示意图;
图4为实施例中第二类型数据包的结构示意图;
图5为实施例中第三类型数据包的结构示意图;
图6为实施例中第四类型数据包的结构示意图;
图中标记说明:1、传输源端,2、传输目的端,11、TCPClient模块,12、第一线程池模块,13、第一安全队列模块,21、TCPServer模块,22、第二线程池模块,23、第二安全队列模块。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。
实施例
如图1所示,一种文件传输系统,包括传输源端1和传输目的端2,传输源端1和传输目的端2相互通信连接,传输源端1用于创建小文件队列、大文件队列以及发送数据队列,用于启动多线程任务、发送指定数据包给传输目的端2、接收来自传输目的端2的回执数据包并进行解析;
传输目的端2用于创建数据合并队列,用于启动多线程任务、接收来自传输源端1的指定数据包并进行解析、发送回执数据包给传输源端1。
在实际应用中,传输源端1可通过TCP/IP协议与传输目的端2相互通信连接,传输源端1设置有TCPClient模块11、第一线程池模块12和第一安全队列模块13,传输目的端2设置有TCPServer模块21、第二线程池模块22和第二安全队列模块23,TCPClient模块11与TCPServer模块21连接,用于实现传输源端1与传输目的端2之间的数据传输;
第一线程池模块12用于构建第一线程池,以启动传输源端1的多线程任务;
第一安全队列模块13用于创建小文件队列、大文件队列以及发送数据队列;
第二线程池模块22用于构建第二线程池,以启动传输目的端2的多线程任务;
第二安全队列模块23用于创建数据合并队列。
应用上述文件传输系统进行文件传输,具体的过程如图2所示,包括以下步骤:
S1、传输源端遍历待传输的目录及文件,并在遍历过程中查看文件属性,根据文件的大小,创建得到小文件队列和大文件队列,其中,小文件队列和大文件队列均用于存放文件路径,大文件队列还用于存放目录的文件路径;
S2、传输源端启动多个小文件发送任务,通过从小文件队列中取元素,以生成第一类型数据包并发送给传输目的端;
传输源端启动多个大文件发送任务,通过从大文件队列中取元素,以生成第二类型数据包并发送给传输目的端;
S3、传输目的端接收来自传输源端的数据包,并对接收的数据包进行解析,若接收的数据包为第一类型数据包,则读取第一类型数据包内的信息,将读取的信息打包成一个数据结构,以创建得到数据合并队列,之后启动多个小文件数据写入任务,完成小文件传输;
若接收的数据包为第二类型数据包,则读取第二类型数据包内的信息,并向传输源端发送包含回执消息的第三类型数据包;
S4、传输源端接收来自传输目的端的第三类型数据包,读取第三类型数据包内的消息,若回执消息为成功,则执行步骤S5,否则输出错误消息、停止传输任务;
S5、传输源端读取第三类型数据包内的信息,若传输的文件类型是目录,则继续执行发送任务,若传输的文件类型为文件,则将该文件路径放入创建的发送数据队列中,之后启动多个大文件数据发送任务,通过从发送数据队列中取出元素,以生成第四类型数据包并发送给出传输目的端;
S6、传输目的端接收来自传输源端的第四类型数据包,通过读取第四类型数据包内的信息,完成大文件传输。
本实施例中,在步骤S1由传输源端创建小文件队列和大文件队列时,如果该文件大小小于1MB,则把该文件路径放入到小文件队列Q1中,如果该文件大小大于1MB或者该文件是目录,则把该文件路径放入到大文件队列Q2中;
在步骤S2由传输源端启动多个小文件发送任务时,这些任务从小文件队列Q1中取元素,当取出的元素(文件)大小累加大于2MB时停止,发送任务把取出的每个文件的内容读出写入到缓存区buffer,然后把在buffer的位置信息写到Header的存储结构中,并设置消息类型为10,接着把缓存区buffer中的内容压缩产生compress buffer,最后把compressbuffer与Header拼接成一个第一类型数据包(如图3所示)发送给传输目的端;
在步骤S2由传输源端启动多个大文件发送任务时,这些任务从大文件队列Q2中取出元素(文件或目录),每取出一个元素,查看元素的类型,属性,元素名称,把这些信息组成一个第二类型数据包(如图4所示)发送给传输目的端,第二类型数据包的消息类型为11。
在步骤S3传输目的端接收到数据包时,每当接收到一个数据包,首先查看数据包的首部分,查看消息类型,如果是10,则继续读出文件个数n,循环n次,读出每个文件的文件名、文件属性、文件在buffer中的偏移、文件在buffer在中的长度以及compress buffer,把这些信息打包成一个数据结构,放入到数据合并队列Q3,之后再启动多个小文件数据写入任务,这些任务从数据合并队列Q3取出元素,每个元素中包含文件名、文件属性、文件在buffer中的偏移、文件在buffer在中的长度以及compress buffer,然后把该compressbuffer解压得到数据buffer,然后根据前面得到的文件名以及文件属性,创建文件,再根据文件在buffer中的偏移和长度,从buffer中读出文件内容,写入到创建的文件中,这样小文件就被传输到传输目的端;
查看消息类型,如果是11,则继续读出文件类型、文件名和文件属性,查看文件类型,如果文件类型是目录,则创建对应目录,如果是文件类型是文件,则创建对应文件,并保存打开的文件句柄,两种情况下都向传输源端发送回执消息,包含回执消息的第三类型数据包如图5所示,该数据包的消息类型为12。
在步骤S4和S5中,传输源端接收数据包,每当接收到一个数据包,查看消息类型,如果是12,则继续读出文件类型、文件名、是否成功、错误消息,查看文件类型,如果文件类型是目录,查看是否成功,如果成功,发送任务继续,如果失败,输出错误消息,停止传输任务;如果文件类型是文件,查看是否成功,如果成功,则把该文件路径放入到发送数据队列Q4,如果失败,则输出错误消息,停止传输任务,之后传输源端启动多个大文件数据发送任务,这些任务从数据队列Q4中取出元素(文件路径),每取出一个元素,读取文件内容,文件内容每次读取2MB,发送一个第四类型数据包(如图6所示)给传输目的端,直到文件内容发送完毕,第四类型数据包的消息类型为13。
在步骤S6传输目的端接收到数据包时,当接收到一个数据包,查看数据包的首部分,查看消息类型,如果是13,继续读出文件路径、数据偏移、buffer长度以及compressbuffer,通过解压compress buffer得到数据buffer,然后根据文件路径,找到文件句柄,最后把buffer中的数据写入到文件中,以完成大文件的传输。
本实施例采用编程语言C++实现上述文件传输过程,主要包括以下内容:
1.传输源端实现一个TCPClient模块,功能如下:使用TCP/IP协议与目的端的通信,可以发送指定数据包给目的端,也可以接收目的端的数据包。
2.传输源端实现一个线程池模块,功能如下:用于构建一个线程池threadpool1,可以启动多个线程完成指定任务(task)。
3.传输源端实现一个安全队列模块,功能如下:用于创建安全队列Q1、Q2、Q4,可以安全地向创建的队列中放入、取出数据。
4.传输源端使用TCPClient连接目的端。
5.传输源端使用C++基础库遍历指定目录,如果发现是文件,查看文件大小,如果小于1MB,则把该文件路径放入到队列Q1中,如果该文件大小小于1MB或这个该文件是目录,则把该文件的路径放入到队列Q2中。
6.传输源端实现SendArchiveFile函数,该函数实现功能如下:从Q1中取元素,当取出的元素(文件)大小累加大于2MB时停止,然后把取出的每个文件的内容读出写入到缓存区buffer,然后把在buffer的位置信息写到Header的存储结构中,并设置消息类型为10,接着把缓存区buffer中的内容压缩产生compress buffer,最后把compress buffer与Header拼接成一个第一类型数据包,通过TCPClient模块发送给目的端。
7.传输源端实现SendCheckFile函数,该函数实现功能如下:从Q2中取出元素(文件或目录),每取出一个元素,查看元素的类型,属性,元素名称,把这些信息组成一个第二类型数据包通过TCPClient模块发送给目的端。
8.传输源端实现SendFileBlock函数,该函数实现功能如下:从Q4中取出元素(文件路径),每取出一个元素,读取文件内容,文件内容每次读取2MB,通过TCPClient模块向目的端发送一个第四类型数据包,直到文件内容发送完毕。
9.传输源端通过threadpool1启动2~3线程,线程执行SendArchiveFi函数。
10.传输源端通过threadpool1启动2~3线程,线程执行SendCheckFile函数。
11.传输源端通过threadpool1启动2~3线程,线程执行SendFileBlock函数。
12.传输源端通过TCPClient1模块接收数据,实现reciveData1函数,该函数实现如下功能:接收到一个数据包,查看消息类型,如果是12,则继续读出文件类型,文件名,是否成功,错误消息。查看文件类型,如果文件类型是目录,继续查看是否成功,如果成功,发送任务继续,如果失败,输出错误消息,停止传输任务;如果文件类型是文件,继续查看是否成功,如果成功,则把该文件路径放入到队列Q4,如果失败,则输出错误消息,停止传输任务。
13.传输目的端实现一个TCPServer模块,功能如下:使用TCP/IP协议监听端口,接受TCPClient的连接,可以发送指定数据包给Client端,也可以接收Client端的数据包。
14.传输目的端也通过线程池模块构建一个线程池threadpool2。
15.传输目的端创建安全队列Q3。
16.传输目的端通过TCPServer模块接收数据,实现reciveData2函数,该函数实现如下功能:启动一个TCPServer,接收数据,每当接收到一个数据包,查看消息类型,如果是10,则继续读出文件个数n,循环n次,读出每个文件的文件名、文件属性、文件在buffer中的偏移、文件在buffer在中的长度以及compress buffer,把这些信息打包成一个数据结构,放入到队列Q3;
如果是11,则继续读出文件类型、文件名、文件属性,查看文件类型,如果文件类型是目录,则创建对应目录,如果是文件类型是文件,则创建对应文件,并保存打开的文件句柄,之后生成第三类型数据包,向Client端发送回执消息;
如果是13,则继续读出文件路径、数据偏移、buffer长度以及compress buffer。解压compress buffer得到数据buffer,然后根据文件路径,找到文件句柄,最后把buffer中的数据写入到文件中,完成大文件的传输。
17.传输目的端实现task4函数,该函数实现功能如下:从队列Q3取出元素,把元素中的compress buffer解压得到数据buffer,然后把元素中的文件名以及文件属性,创建文件,然后根据文件在buffer中的偏移和长度,从buffer中读出文件内容,写入到文件中,完成小文件的合并传输。
18.传输目的端通过threadpool2启动2~3线程,线程执行task4函数。
19.传输目的端执行reciveData2函数,启动TCPServer,接收数据。
本实施例将本发明提出的技术方案与传统的SFTP测试工具进行文件传输时间对比,其中,SFTP测试工具使用xftp,每个文件大小为14字节,测试对比结果如表1所示:
表1
SFTP工具 | 本发明 | |
10万小文件 | 平均耗时1830s | 平均耗时103s |
20万小文件 | 平均耗时3852s | 平均耗时378s |
由此可知,本发明提出的技术方案充分利用多种安全队列以及多线程并发的方式,采用小文件合并数据包以及大文件后传数据的方式,相比于传统的文件传输方式,能够大大提高传输速度、降低传输时间。
Claims (10)
1.一种文件传输系统,其特征在于,包括传输源端(1)和传输目的端(2),所述传输源端(1)和传输目的端(2)相互通信连接,所述传输源端(1)用于创建小文件队列、大文件队列以及发送数据队列,用于启动多线程任务、发送指定数据包给传输目的端(2)、接收来自传输目的端(2)的回执数据包并进行解析;
所述传输目的端(2)用于创建数据合并队列,用于启动多线程任务、接收来自传输源端(1)的指定数据包并进行解析、发送回执数据包给传输源端(1)。
2.根据权利要求1所述的一种文件传输系统,其特征在于,所述传输源端(1)通过TCP/IP协议与传输目的端(2)相互通信连接。
3.根据权利要求2所述的一种文件传输系统,其特征在于,所述传输源端(1)设置有TCPClient模块(11)、第一线程池模块(12)和第一安全队列模块(13),所述TCPClient模块(11)与传输目的端(2)连接,用于实现传输源端(1)与传输目的端(2)之间的数据传输;
所述第一线程池模块(12)用于构建第一线程池,以启动传输源端(1)的多线程任务;
所述第一安全队列模块(13)用于创建小文件队列、大文件队列以及发送数据队列。
4.根据权利要求3所述的一种文件传输系统,其特征在于,所述传输目的端(2)设置有TCPServer模块(21)、第二线程池模块(22)和第二安全队列模块(23),所述TCPServer模块(21)与传输源端(1)连接,用于实现传输目的端(2)与传输源端(1)之间的数据传输;
所述第二线程池模块(22)用于构建第二线程池,以启动传输目的端(2)的多线程任务;
所述第二安全队列模块(23)用于创建数据合并队列。
5.一种应用权利要求1所述文件传输系统的文件传输方法,其特征在于,包括以下步骤:
S1、传输源端遍历待传输的目录及文件,并在遍历过程中查看文件属性,根据文件的大小,创建得到小文件队列和大文件队列,其中,小文件队列和大文件队列均用于存放文件路径,大文件队列还用于存放目录的文件路径;
S2、传输源端启动多个小文件发送任务,通过从小文件队列中取元素,以生成第一类型数据包并发送给传输目的端;
传输源端启动多个大文件发送任务,通过从大文件队列中取元素,以生成第二类型数据包并发送给传输目的端;
S3、传输目的端接收来自传输源端的数据包,并对接收的数据包进行解析,若接收的数据包为第一类型数据包,则读取第一类型数据包内的信息,将读取的信息打包成一个数据结构,以创建得到数据合并队列,之后启动多个小文件数据写入任务,完成小文件传输;
若接收的数据包为第二类型数据包,则读取第二类型数据包内的信息,并向传输源端发送包含回执消息的第三类型数据包;
S4、传输源端接收来自传输目的端的第三类型数据包,读取第三类型数据包内的消息,若回执消息为成功,则执行步骤S5,否则输出错误消息、停止传输任务;
S5、传输源端读取第三类型数据包内的信息,若传输的文件类型是目录,则继续执行发送任务,若传输的文件类型为文件,则将该文件路径放入创建的发送数据队列中,之后启动多个大文件数据发送任务,通过从发送数据队列中取出元素,以生成第四类型数据包并发送给出传输目的端;
S6、传输目的端接收来自传输源端的第四类型数据包,通过读取第四类型数据包内的信息,完成大文件传输。
6.根据权利要求5所述的一种文件传输方法,其特征在于,所述步骤S2的具体过程为:
传输源端启动多个小文件发送任务,这些任务从小文件队列中取元素,当取出的元素大小累加大于预设阈值时停止,将取出的每个元素的内容读出写入到缓存区,之后将缓存区的位置信息写到Header的存储结构中,并设置消息类型为第一类型,接着把缓存区中的内容压缩产生compress buffer,最后把compress buffer与Header拼接成第一类型数据包发送给传输目的端;
传输源端启动多个大文件发送任务,这些任务从大文件队列中取出元素,每取出一个元素,将该元素的文件类型,文件名称以及文件属性组成一个数据包,并设置消息类型为第二类型,得到第二类型数据包后发送给传输目的端。
7.根据权利要求6所述的一种文件传输方法,其特征在于,所述步骤S3的具体过程为:
若接收的数据包为第一类型数据包,则从第一类型数据包中读取文件个数为n,之后循环n次,以读取每个文件的文件名、文件属性、文件在缓存区的偏移、文件在缓存区的长度以及compress buffer,将这些信息打包成一个数据结构,放入数据合并队列中;
之后启动多个小文件写入任务,这些任务从数据合并队列中取出元素,每个元素中包含文件名、文件属性、文件在缓存区的偏移、文件在缓存区的长度以及compress buffer,将compress buffer解压得到数据缓存,根据文件名以及文件属性,创建对应的文件,根据文件在缓存区的偏移和长度,从缓存区中读取文件内容,并将读取的文件内容写入创建的文件中,完成小文件传输;
若接收的数据包为第二类型数据包,则继续读取文件类型、文件名称和文件属性,若文件类型为目录,则创建对应的目录,若文件类型为文件,则创建对应文件,并保存打开的文件句柄,最后向传输源端发送第三类型数据包,其中,第三类型数据包中的信息包括文件类型、文件名、传输成功标记以及错误消息。
8.根据权利要求7所述的一种文件传输方法,其特征在于,所述步骤S4的具体过程为:传输源端接收来自传输目的端的第三类型数据包,读取第三类型数据包内的消息,若传输成功标记对应于成功,则执行步骤S5;若传输成功标记对应于失败,则输出错误消息、停止传输任务。
9.根据权利要求8所述的一种文件传输方法,其特征在于,所述步骤S5中传输源端启动多个大文件数据发送任务的具体过程为:
传输源端启动多个大文件数据发送任务,这些任务从发送数据队列中取出元素,每取出一个元素,则读取对应的文件内容,当读取的文件内容达到预设阈值时,则发送一个第四类型数据包给传输目的端,直到所有文件内容发送完毕,其中,第四类型数据包中的信息包括文件路径、数据偏移、缓存长度以及compress buffer。
10.根据权利要求8所述的一种文件传输方法,其特征在于,所述步骤S6的具体过程为:
传输目的端从第四类型数据包中读取文件路径、数据偏移、缓存长度以及compressbuffer,之后解压compress buffer得到数据缓存,再根据文件路径找到文件句柄,最后将缓存中的数据写入文件中,完成大文件传输。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011364674.1A CN112532724A (zh) | 2020-11-27 | 2020-11-27 | 一种文件传输系统及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011364674.1A CN112532724A (zh) | 2020-11-27 | 2020-11-27 | 一种文件传输系统及其方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112532724A true CN112532724A (zh) | 2021-03-19 |
Family
ID=74994654
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011364674.1A Pending CN112532724A (zh) | 2020-11-27 | 2020-11-27 | 一种文件传输系统及其方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112532724A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023103442A1 (zh) * | 2021-12-06 | 2023-06-15 | 荣耀终端有限公司 | 分享文件的方法和电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102111301A (zh) * | 2011-03-28 | 2011-06-29 | 上海云高软件科技有限公司 | 一种通用文件传输系统及其实现方法 |
CN106302604A (zh) * | 2015-06-05 | 2017-01-04 | 腾讯科技(深圳)有限公司 | 数据传输方法及装置 |
CN107391280A (zh) * | 2017-07-31 | 2017-11-24 | 郑州云海信息技术有限公司 | 一种小文件的接收和存储方法及装置 |
CN108804566A (zh) * | 2018-05-22 | 2018-11-13 | 广东技术师范学院 | 一种基于Hadoop的海量小文件读取方法 |
JP2019204473A (ja) * | 2018-05-22 | 2019-11-28 | 広東技術師範学院 | Hadoopに基づいて、データマージモジュールとHBaseキャッシュモジュールを備えるHDFSに複数の2MB以下の小さなファイルを書き込む方法 |
-
2020
- 2020-11-27 CN CN202011364674.1A patent/CN112532724A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102111301A (zh) * | 2011-03-28 | 2011-06-29 | 上海云高软件科技有限公司 | 一种通用文件传输系统及其实现方法 |
CN106302604A (zh) * | 2015-06-05 | 2017-01-04 | 腾讯科技(深圳)有限公司 | 数据传输方法及装置 |
CN107391280A (zh) * | 2017-07-31 | 2017-11-24 | 郑州云海信息技术有限公司 | 一种小文件的接收和存储方法及装置 |
CN108804566A (zh) * | 2018-05-22 | 2018-11-13 | 广东技术师范学院 | 一种基于Hadoop的海量小文件读取方法 |
JP2019204473A (ja) * | 2018-05-22 | 2019-11-28 | 広東技術師範学院 | Hadoopに基づいて、データマージモジュールとHBaseキャッシュモジュールを備えるHDFSに複数の2MB以下の小さなファイルを書き込む方法 |
Non-Patent Citations (1)
Title |
---|
姜维, 哈尔滨工业大学出版社 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023103442A1 (zh) * | 2021-12-06 | 2023-06-15 | 荣耀终端有限公司 | 分享文件的方法和电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111694800B (zh) | 一种提升数据同步性能的方法和数据同步系统 | |
WO2014135038A1 (zh) | 基于pcie总线的报文传输方法与装置 | |
WO2022032984A1 (zh) | 一种mqtt协议仿真方法及仿真设备 | |
WO2019192155A1 (zh) | 交互界面呈现方法、客户端、终端及系统 | |
CN112100146B (zh) | 一种高效的纠删分布式存储写入方法、系统、介质及终端 | |
CN112532724A (zh) | 一种文件传输系统及其方法 | |
US20030191860A1 (en) | Accelerated collaboration of high frame rate applications | |
CN114125077B (zh) | 一种实现多执行体tcp会话归一化的方法和装置 | |
WO2024187876A1 (zh) | 一种数据传输方法、装置、设备及非易失性可读存储介质 | |
CN107947965B (zh) | 服务链编译器 | |
CN1988543A (zh) | 报文类型识别方法及装置、报文首部压缩方法及系统 | |
CN112612850A (zh) | 数据同步方法及装置 | |
CN114422617B (zh) | 一种报文处理方法、系统及计算机可读存储介质 | |
CN113014510A (zh) | 惯导系统分布式测试中数据缓存方法及装置 | |
CN114125081A (zh) | 一种接收数据的处理方法、装置及存储介质 | |
CN114697205B (zh) | 日志处理方法及装置 | |
CN112231409B (zh) | 数据库同步的初始化装载方法、装置、设备和存储介质 | |
CN111198844B (zh) | 一种用于传输指定文件或目录结构的方法 | |
CN114125032A (zh) | 一种边缘协议数据处理方法和系统 | |
CN113382086A (zh) | 文档传输方法、装置、电子设备及计算机程序产品 | |
Dams et al. | The bounded retransmission protocol revisited. | |
CN115665168B (zh) | 一种大文件分片上传方法、装置及其介质 | |
CN108509184B (zh) | 消息分发方法、计算机可读存储介质及电子设备 | |
CN107315752A (zh) | 数据结转方法及系统 | |
CN111193545A (zh) | 一种基于以太网的自校验光纤数据单向传输方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210319 |
|
RJ01 | Rejection of invention patent application after publication |