使用SOCKET实现FTP的简易客户端

2015-01-17 20:00:57|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 网络通信|来源:唯设编程网

以上的代码是MFC对话框某个按钮的响应函数,最终实现的效果如下:

SOCKET实现FTP客户端

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中,以便其它程序调用,后面我们会逐个实现对应的成员方法。

发表评论0条 】
网友评论(共?条评论)..
使用SOCKET实现FTP的简易客户端