C++实现文件传输.doc
上传人:17****21 上传时间:2024-09-09 格式:DOC 页数:29 大小:74KB 金币:5 举报 版权申诉
预览加载中,请您耐心等待几秒...

C++实现文件传输.doc

C++实现文件传输.doc

预览

免费试读已结束,剩余 19 页请下载文档后查看

5 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

/NUMPAGES29HYPERLINK"://blog.csdn.net/zhengkangchen/article/details/3942235"\o"c++实现文件传输之一:框架结构和界面实现"c++实现文件传输之一:框架结构和界面实现在木马中文件管理的重要性,是无需质疑的,对于文件的管理,做到并不难,但做好却也不易在我们编写一个功能完整的“文件木马〞其实现效果如下图。为了文章的完整性,我们将分为数篇来介绍,本文主要介绍程序的整体框架和界面实现,在以后的文章中将以此框架为根底实现详细的功能。实现:枚举磁盘,枚举目录,获取文件信息上传文件,下载文件,执行文件,创建目录,删除目录等传输控制结构要实现客户端与服务端的通信,设计一个合理的传输控制结构,会使后面的工作轻松很多,为了使代码易读首先对要使用的命令进展预定义其各个命令定义如下#defineGetDriver0x01//磁盘信息#defineGetDirInfo0x02//目录信息#defineExecFile0x03//执行文件#defineGetFile0x04//下载文件#definePutFile0x05//上传文件#defineDelFile0x06//删除文件#defineDelDir0x07//删除目录#defineCreateDir0x08//创建目录#defineFileInfo0x09//文件信息#defineGetScreen0x10//查看屏幕在程序的网络通信中主要有操作命令,命令对像,和具体数据三局部,对于命令的传输定义如下结构typedefstruct{intID;//操作命令BYTElparam[BUF_LEN*2];//命令对像}COMMAND;因为在程序中打交道最多的就是文件,对文件的详细属性定义如下结构typedefstruct{charFileName[MAX_PATH];//文件名称intFileLen;//文件长度charTime[50];//时间信息BOOLIsDir;//为目录否BOOLError;//错误信息HICONhIcon;//图标句柄}FILEINFO;服务端结构服务端还是比拟简单的其整体思路如下1.服务端循环承受连接,并把连接交给线程处理2.线程承受"命令数据",并跟据命令ID将命令对像和SOCKET句柄传给处理函数3.函数执行指定功能,并返回执行结果对整体结构的描述,我们用伪代码表述如下main(){/*初示化设置......*/while(true){if(client=accept(server,(sockaddr*)&clientaddr,&len))//循环承受连接{CreateThread(NULL,NULL,SLisen,(LPVOID)client,NULL,NULL);//传递线程处理}}/*清理释放资源......*/WSACleanup();}服务端程序运行后循环承受连接,如果有新的连接就传递给新的线程处理,线程代码如下DWORDWINAPISLisen(LPVOIDlparam){SOCKETclient=(SOCKET)lparam;COMMANDcommand;while(1){if(recv(client,(char*)&command,sizeof(command),0)==SOCKET_ERROR)//承受命令数据{cout<<"TheClinetSocketisClosed/n";break;}else{switch(command.ID)//判断命令ID{caseGetDriver://将命令对像和SOCKET句柄传递给处理函数GetDriverProc(command,client);break;caseDelFile:DelFileProc(command,client);break;/*其它命令......*/}}}}线程式的功能是承受客户端的"命令数据",并跟跟据命令ID将命令对像传递给处理函数,由函数完成指定的功能以删除文件命令为例其函数格式如下DWORDDelFileProc(COMMANDcommand,SOCKETclient){if(DeleteFile((char*)command.lparam)==0)//command.lparam为命令对像,这里为要删除的文件路径{send(client,"删除失败...");}else{send(client,"删除成功...");}}很容易看出,处理函数承受"命令对像"和客户端SOCKET句柄,执行后会把结果传递回去....客户端结构客户端结构的实现思路如下1.跟服务端建立连接2.发送用户命令3.启动一个线程,用于承受服务端的返回信息对整体结构的描述,我们用伪代码表述如下voidCMyDlg