1、c+实现文件传输之三:断点续传与多线程传输继木马编程 DIY 的上两篇,现在我们开始讨论断点续传与多线程文件传输的实现 .其实这两项功能是下载软件所必不可少的功能了,现在我们把它加到自己的木马中来感受感受. 提到多线程下载,首先向网络蚂蚁的作者洪以容前辈致敬,正是由于网络蚂蚁而使得多线程下载被关注并流行起来. 在这本篇文章中我们将简单的实现支持断点续传和多线程传输的程序.为了更清晰的说明问题, 我们将断点续传与多线程传输分别用两个程序来实现多线程传输实现实现原理将源文件按长度为分为 N 块文件 ,然后开辟 N 个线程,每个线程传输一块,最后合并所有线线程文件.比如一个文件 500M 我们按长度
2、可以分 5 个线程传输.第一线程从 0-100M,第二线程从 100M-200M最后合并 5 个线程文件 .实现流程1.客户端向服务端请求文件信息(名称,长度)2.客户端跟据文件长度开辟 N 个线程连接服务端3.服务端开辟新的线程与客户端通信并传输文件4.客户端将每线程数据保存到一个文件5.合并所有线程文件编码实现大体说来就是按以上步骤进行,详细的实现和一些要点, 我们跟据以上流程在编码中实现结构定义在通信过程中需要传递的信息包括文件名称,文件长度, 文件偏移 ,操作指令等信息,为了方便操作我们定义如下结构 代码:typedef structchar Name100; /文件名称int Fil
3、eLen; /文件长度int CMD; /操作指令int seek; /线程开始位置SOCKET sockid; FILEINFO;1.请求文件信息客户端代码如下 代码:FILEINFO fi;memset(char*)fi.CMD=1; /得到文件信息if(send(client,(char*)if(ret=SOCKET_ERROR)cout0)int ret=recv(client,if(ret=SOCKET_ERROR)coutFilePath;/*这部分为网络参数与设置,详细请参照源代码*/while(true)if(client=accept(server,(sockaddr *)if(ret=SOCKET_ERROR)coutFilePath;/*网络参数初示化,详细请参照源代码*/if(connect(client,(SOCKADDR*)if(ret=SOCKET_ERROR)cout一文在功能实现一篇中主要参考了“草草“ 的 SEU_PEEPER 木马的源代码!