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