使用c++实现一个FTP客户端(二)
来源:互联网 发布:照片制作软件 编辑:程序博客网 时间:2024/05/21 11:14
接上篇http://www.cnblogs.com/jzincnblogs/p/5213978.html,这篇主要记录编程方面的重点。
客户端使用了Windows Socket提供的API,支持上传、下载、删除、查看文件,断点续传,二进制/ASCII模式切换,被动模式切换,记录操作日志等功能。
代码包含的类如下:
①MySocket类,对SOCKET进行了简单的封装
1 //对winsock SOCKET的封装 2 class MySocket 3 { 4 public: 5 MySocket(); 6 //~MySocket(); 7 //重载向SOCKET类型转换的运算符 8 operator SOCKET() const; 9 //设置地址信息10 void SetAddrInfo(std::string host, int port);11 bool Connect();12 //bool Disconnect();13 bool Create(int af = AF_INET, int type = SOCK_STREAM, int protocol = IPPROTO_TCP);14 bool Close();15 //获取主机ip16 std::string GetHostIP() const; 17 //获取主机端口18 int GetPort() const; 19 private:20 SOCKET sock;21 SOCKADDR_IN addr_in; //记录连接的服务器的地址信息22 bool conn_flag; //判断是否已连接23 };
②Record类,存储了客户端与服务器的交互信息的数据结构
1 //枚举类型,CMD代表命令信息,RES代表响应信息 2 enum log_type { CMD = 1, RES = 2 }; 3 4 //与服务器的交互信息 5 class Record 6 { 7 friend std::ostream & operator<<(std::ostream &os, const Record &rcd); 8 public: 9 Record(log_type t, std::string m);10 Record(const Record &rcd);11 Record & operator=(const Record &rcd);12 //获取信息内容13 std::string GetMsg() const;14 private:15 log_type type; //信息类型16 std::string msg;17 };
③Logger类,负责控制传输端口的发送命令,接收服务器响应,记录、显示操作日志等功能,包含一个Record类的vector,用于存储此次程序运行的信息
1 class Logger 2 { 3 public: 4 Logger(const std::string &host, int port); 5 ~Logger(); 6 Logger(const Logger &logger) = delete; 7 Logger & operator=(const Logger &logger) = delete; 8 //发送命令 9 void SendCmd(const std::string &cmd);10 //接收来自服务器的响应11 void RecvResponse();12 //记录信息13 void Log(log_type type, const std::string &cmd);14 //获取最后一条交互信息,用于验证命令是否执行成功15 std::string GetLastLog() const;16 void DisplayLog() const;17 private:18 MySocket sock_cmd; //发送接收命令的socket19 std::vector<Record> vec_rcd; //保存此次客户端运行的交互信息20 //将信息记录到文本文件中21 void WriteRecord();22 };
④File类,用于存储文件信息的数据结构
1 class File 2 { 3 friend std::ostream & operator<<(std::ostream &os, const File &file); 4 public: 5 //斜杠代表根目录 6 File(const std::string &n = "", const std::string &t = "", const int &s = 0, const std::string &p = "/"); 7 int GetSize() const; 8 private: 9 std::string name;10 std::string path;11 std::string create_time;12 int size;13 };
⑤FTPClient类,代码的核心类
1 class FTPClient 2 { 3 public: 4 FTPClient(const string &host, int port); 5 bool Login(const string &usr, const string &pwd); 6 //进入被动模式 7 bool EnterPasvMode(); 8 //更新文件列表 9 void UpdateFileList();10 //获取指定文件信息11 File GetFileInfo(const string &f);12 void DisplayLog() const;13 //以二进制格式下载文件14 bool DownloadBinary(const string &f);15 //以ASCII格式下载文件16 bool DownloadASCII(const string &f);17 //上传文件18 bool Upload(const string &f, bool binary);19 //删除指定文件20 bool Delete(const string &f);21 //退出客户端22 bool Quit();23 private:24 Logger logger;25 MySocket sock_data; //用于传输数据的socket26 string host;27 int port;28 //29 void GetFileList();30 bool EnterASCIIMode(); //进入ASCII模式31 bool EnterBinaryMode(); //进入二进制模式32 };
阅读全文
0 0
- 使用c++实现一个FTP客户端(二)
- 使用c++实现一个FTP客户端(一)
- 使用c++实现一个FTP客户端(三)
- 使用 Socket 通信实现 FTP 客户端程序(二)
- C#使用socket实现FTP、POP3、SMTP的客户端 (二)
- 一个ftp客户端的实现
- C语言实现ftp客户端
- linux C 实现FTP客户端
- 使用C语言socket实现windows pc与ftp服务器通信---socket实现ftp客户端
- 一个简单的FTP客户端 实现上传下载
- Java实现一个简单的FTP客户端
- 用PHP实现一个FTP客户端
- FTP 下载客户端 C语言实现
- 使用WCF来实现一个ShadowSocks客户端(二)
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- 使用 Socket 通信实现 FTP 客户端程序
- Axis2 报错 Faulty Services
- 使用c++实现一个FTP客户端(一)
- 第十讲 Java中的工具类之Arrays
- pytorch 可视化初探
- [Office] 设置制表符格式
- 使用c++实现一个FTP客户端(二)
- 线程--初始化效果
- 使用c++实现一个FTP客户端(三)
- 阿里云双十二优惠5折服务器域名优惠汇总
- pygame库写游戏——入门<2> 游戏中的关键——事件
- SSM框架整合的文章(1)
- 消息订阅SignalR Hub
- 按此博客解决了scipy安装不成功的情况
- JavaDay04--Notes(冒泡排序+插入排序+快速排序)