2024年8月8日发(作者:)

C++实现文件传输之三:断点续传与多线

程传输

继木马编程

DIY

的上两篇,现在我们开始讨论断点续传与多线程文件传输的实现.其实这两项

功能是下载软件所

必不可少的功能了,现在我们把它加到自己的木马中来感受感受.提到多线程下载,首先向网

络蚂蚁的作者

洪以容前辈致敬,正是由于网络蚂蚁而使得多线程下载被关注并流行起来.在这本篇文章中

我们将简单的实现

支持断点续传和多线程传输的程序.为了更清晰的说明问题,我们将断点续传与多线程传输

分别用两个程序来实现

多线程传输实现

实现原理

将源文件按长度为分为

N

块文件,然后开辟

N

个线程,每个线程传输一块,最后合并所有线线

程文件.比如

一个文件

500M

我们按长度可以分

5

个线程传输.第一线程从

0-100M,

第二线程从

最后合并

5

个线程文件

.

实现流程

1

.客户端向服务端请求文件信息(名称,长度

2

.客户端跟据文件长度开辟

N

个线程连接服务端

3 .

服务端开辟新的线程与客户端通信并传输文件

4

.客户端将每线程数据保存到一个文件

5 .

合并所有线程文件

编码实现

大体说来就是按以上步骤进行,详细的实现和一些要点,我们跟据以上流程在编码中实现

结构定义

在通信过程中需要传递的信息包括文件名称,文件长度,文件偏移,操作指令等信息,为了方便

操作我们定义如下结构

代码:

typedefstruct

char

int

int

int

Name[100];

FileLen;

CMD;

seek;

〃文件名称

〃文件长度

〃操作指令

//线程开始位

SOCKETsockid;

}FILEINFO;