2015-01-17 20:00:57|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:C/C++, 网络通信|来源:唯设编程网
以上的代码是MFC对话框某个按钮的响应函数,最终实现的效果如下:
CFTP是我们定义的FTP客户端核心功能类,该类的声明如下:
#pragma once #ifdef FTP_EXPORTS #define FTP_API __declspec(dllexport) #else #define FTP_API __declspec(dllimport) #endif #include "winsock2.h" #pragma comment(lib,"ws2_32.lib") #include "stdio.h" #include <string> #include <vector> // 此类是从 FTP.dll 导出的 class FTP_API CFTP { public: struct FILE_ITEM{ char type; //目录-D,文件-F; size_t fSize; //文件(目录)大小; std::string fName; //文件(目录)的名称 }; public: CFTP(const char* ip, const char* logFile="ftp_log.dat"); ~CFTP(void); //连接ftp服务器 int ftp_connect(int timeout = 300); //登录ftp服务器 int ftp_login(const char* user,const char* pass); //显示当前目录 int ftp_pwd(char* buff); //更改目录 int ftp_cd(const char* dir); //返回上层目录 int ftp_cdup(); //创建目录 int ftp_mkdir(const char* dir); //删除目录 int ftp_rmdir(const char* dir); //数据传输模式 int ftp_setpasv(); //上传目录 int ftp_upload_dir(const char* localpath,const char* remotepath,size_t buf_size = 1024); //上传文件 int ftp_upload(const char* localfile,const char* remotepath,const char* remotefilename,size_t buf_size = 1024); //获取文件大小 size_t ftp_getFileSize(const char* remoteFileName); //列出FTP服务器目录中的文件和子目录 int ftp_list_dir(const char* remotePath,std::vector<FILE_ITEM>& vecFileList); //递归创建本地目录 int local_create_dir(const char* localPath); //下载目录 int ftp_download_dir(const char* localPath,const char* remotePath,size_t buf_size = 1024); //下载文件 int ftp_download(const char* localfile,const char* remotefile,size_t buf_size = 1024); //退出登录 int ftp_quit(); //buf_recv:接受返回内容的缓存区 //buf_length:缓存区长度 int ftp_sendcmd(const char* p_cmd,char* buf_recv,size_t buf_length); //从服务器接收返回内容 int recv_buf(char* recv_buf,int buf_length); private: SOCKET m_sockctrl;//控制连接socket SOCKET m_sockdata;//数据连接socket char m_cmd[256];//存放指令 char m_resp[1024];//存放返回语句 char m_ip[64];//保存ip FILE* m_pLogFile; //命令日志文件 int ftp_mkdirSingle(const char* dir); //保存日志文件 void save_log(const char* str_log, FILE* pLogFile); //得到状态码 int get_state_code(const char* p_buf); };
这个类我们定义在一个dll中,以便其它程序调用,后面我们会逐个实现对应的成员方法。