您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > linux FTP 客户端
#ifndefCLIENT_H_#defineCLIENT_H_#includesys/socket.h#includeunistd.h#includefcntl.h#includestdio.h#includestdlib.h#includesys/types.h#includesys/ioctl.h#includenetinet/in.h#includesys/stat.h#includenetdb.h#includeerrno.h#includearpa/inet.h#includesys/stat.h#includestring#includelist#defineINVALID_SOCKET-1#defineFTP_APIint#defineMAX_PATH260#definetraceprintf#defineFTP_PARAM_BASE#defineFTP_DEFAULT_PORT21//FTP默认端口号#defineFTP_DEFAULT_BUFFER1024*4//FTP下载缓冲默认大小#defineFTP_DEFAULT_PATH/mnt/dvs///FTP默认保存路径#defineFTP_COMMAND_BASE1000#defineFTP_COMMAND_ENDFTP_COMMAND_BASE+30#defineFTP_COMMAND_USERNAMEFTP_COMMAND_BASE+1//用户名#defineFTP_COMMAND_PASSWORDFTP_COMMAND_BASE+2//密码#defineFTP_COMMAND_QUITFTP_COMMAND_BASE+3//退出#defineFTP_COMMAND_CURRENT_PATHFTP_COMMAND_BASE+4//获取文件路径#defineFTP_COMMAND_TYPE_MODEFTP_COMMAND_BASE+5//改变传输模式#defineFTP_COMMAND_PSAV_MODEFTP_COMMAND_BASE+6//被动端口模式#defineFTP_COMMAND_DIRFTP_COMMAND_BASE+7//获取文件列表#defineFTP_COMMAND_CHANGE_DIRECTORYFTP_COMMAND_BASE+8//改变路径#defineFTP_COMMAND_DELETE_FILEFTP_COMMAND_BASE+9//删除文件#defineFTP_COMMAND_DELETE_DIRECTORYFTP_COMMAND_BASE+10//删除目录/文件夹#defineFTP_COMMAND_CREATE_DIRECTORYFTP_COMMAND_BASE+11//创建目录/文件夹#defineFTP_COMMAND_RENAME_BEGINFTP_COMMAND_BASE+12//开始重命名#defineFTP_COMMAND_RENAME_ENDFTP_COMMAND_BASE+13//重命名结束#defineFTP_COMMAND_FILE_SIZEFTP_COMMAND_BASE+14//获取文件大小#defineFTP_COMMAND_DOWNLOAD_POSFTP_COMMAND_BASE+15//下载文件从指定位置开始#defineFTP_COMMAND_DOWNLOAD_FILEFTP_COMMAND_BASE+16//下载文件#defineFTP_COMMAND_UPLOAD_FILEFTP_COMMAND_BASE+17//上传文件#defineFTP_COMMAND_APPEND_FILEFTP_COMMAND_BASE+18//追加上载文件/*登陆步骤login2Server|inputUserName|inputPassWord|具体操作|quit*/classCFTPManager{public:enumtype{binary=0x31,ascii,};CFTPManager(void);virtual~CFTPManager(void);//!登陆服务器FTP_APIlogin2Server(conststd::string&serverIP);//!输入用户名FTP_APIinputUserName(conststd::string&userName);//!输入密码FTP_APIinputPassWord(conststd::string&password);//!退出FTPFTP_APIquitServer(void);//!命令:PWDconststd::stringPWD();//!设置传输格式2进制还是ascii方式传输FTP_APIsetTransferMode(typemode);//!设置为被动模式conststd::stringPasv();//!命令:DIRconststd::stringDir(conststd::string&path);//!命令:CDFTP_APICD(conststd::string&path);//!删除文件FTP_APIDeleteFile(conststd::string&strRemoteFile);//!删除文件夹/目录FTP_APIDeleteDirectory(conststd::string&strRemoteDir);//!创建目录/文件夹FTP_APICreateDirectory(conststd::string&strRemoteDir);//!重命名FTP_APIRename(conststd::string&strRemoteFile,conststd::string&strNewFile);//!获取文件大小longgetFileLength(conststd::string&strRemoteFile);//!关闭连接voidClose(intsock);//下载文件FTP_APIGet(conststd::string&strRemoteFile,conststd::string&strLocalFile);//上载文件支持断电传送方式FTP_APIPut(conststd::string&strRemoteFile,conststd::string&strLocalFile);private://!合成发送到服务器的命令conststd::stringparseCommand(constunsignedintcommand,conststd::string&strParam);//!建立连接FTP_APIConnect(intsocketfd,conststd::string&serverIP,unsignedintnPort);//!返回服务器信息conststd::stringserverResponse(intsockfd);//!获取服务器数据FTP_APIgetData(intfd,char*strBuf,unsignedlonglength);//!发送命令FTP_APISend(intfd,conststd::string&cmd);//!发送命令FTP_APISend(intfd,constchar*cmd,constsize_tlen);//!建立数据连接FTP_APIcreateDataLink(intdata_fd);//!解析PASV模式返回的字符串获取FTP端口号和FTP服务器IPFTP_APIParseString(std::liststd::stringstrArray,unsignedlong&nPort,std::string&strServerIp);//打开本地文件FILE*createLocalFile(conststd::string&strLocalFile);//下载文件FTP_APIdownLoad(conststd::string&strRemoteFile,conststd::string&strLocalFile,constintpos=0,constunsignedintlength=0);//解析返回ftp命令的值FTP_APIparseResponse(conststd::string&str);private://!控制连接套接字intm_cmdSocket;//!当前用户名std::stringm_strUserName;//!当前用户密码std::stringm_strPassWord;//!服务器的IPstd::stringm_strServerIP;//!服务器Portunsignedintm_nServerPort;//!服务器回应信息缓存std::stringm_strResponse;//!保存命令参数std::stringm_commandStr;//!当前使用的命令参数unsignedintm_nCurrentCommand;//!是否登陆标志。boolm_bLogin;};#endif//源代码//author:fuyl//2011-04-06-13:58#include../Source/FTPManager.hstaticintSplitString(std::stringstrSrc,std::liststd::string&strArray,std::stringstrFlag){intpos=1;while((pos=(int)strSrc.find_first_of(strFlag.c_str()))0){strArray.insert(strArray.end(),strSrc.substr(0,pos));strSrc=strSrc.substr(pos+1,strSrc.length()-pos-1);}strArray.insert(strArray.end(),strSrc.substr(0,strSrc.length()));return0;}CFTPManager::CFTPManager(void):m_bLogin(false){m_cmdSocket=socket(AF_INET,SOCK_STREAM,0);}CFTPManager::~CFTPManager(void){std::stringstrCmdLine=parseCommand(FTP_COMMAND_QUIT,);Send(m_cmdSocket,strCmdLine.c_str());close(m_cmdSocket);m_bLogin=false;}FTP_APICFTPManager::login2Server(conststd::string&serverIP){std::stringstrPort;intpos=serverIP.find_first_of(:);if(pos0){strPort=serverIP.substr(pos+1,serverIP.length()-pos);}else{pos=serverIP.length();strPort=FTP_DEFAULT_PORT;}m_strServerIP=serverIP.substr(0,pos);m_nServerPort=atol(strPort.c_str());trace(IP:%sport:%d\n,m_strServerIP.c_str(),m_nServerPort);if(Connect(m_cmdSocket,m_strServerIP,m_nServerPort)0){return-1;}m_strResponse=serverResponse(m_cmdSocket);printf(@@@@Response:%s,m_strResponse.c_str());returnparseResponse(m_strResponse);}FT
本文标题:linux FTP 客户端
链接地址:https://www.777doc.com/doc-1525353 .html