当前位置:   article > 正文

C++ FTP简单客户端_c++搭建ftp客户端

c++搭建ftp客户端

依照FTP协议规范设计,实现基本功能:列出内容列表、下载文件、上传文件、重命名文件、删除文件等等,代码仅做参考:

(此代码运行在linux系统上,如需支持windows系统,需对头文件稍作修改。)

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/socket.h>
  5. #include <arpa/inet.h>
  6. #define BUFFER_SIZE 1024
  7. // 连接FTP服务器
  8. int connect_server(const char* server_ip, int port) {
  9. int sockfd;
  10. struct sockaddr_in server_addr;
  11. // 创建套接字
  12. if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
  13. perror("socket");
  14. return -1;
  15. }
  16. // 设置服务器地址
  17. memset(&server_addr, 0, sizeof(server_addr));
  18. server_addr.sin_family = AF_INET;
  19. server_addr.sin_port = htons(port);
  20. if (inet_pton(AF_INET, server_ip, &(server_addr.sin_addr)) <= 0) {
  21. perror("inet_pton");
  22. return -1;
  23. }
  24. // 连接服务器
  25. if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
  26. perror("connect");
  27. return -1;
  28. }
  29. return sockfd;
  30. }
  31. // 发送FTP命令
  32. void send_ftp_command(int sockfd, const char* command) {
  33. char buffer[BUFFER_SIZE];
  34. sprintf(buffer, "%s\r\n", command);
  35. send(sockfd, buffer, strlen(buffer), 0);
  36. }
  37. // 接收FTP响应
  38. void receive_ftp_response(int sockfd) {
  39. char buffer[BUFFER_SIZE];
  40. memset(buffer, 0, sizeof(buffer));
  41. recv(sockfd, buffer, sizeof(buffer)-1, 0);
  42. printf("%s", buffer);
  43. }
  44. // 登录FTP服务器
  45. void login_ftp_server(int sockfd, const char* username, const char* password) {
  46. send_ftp_command(sockfd, "USER %s", username);
  47. receive_ftp_response(sockfd);
  48. send_ftp_command(sockfd, "PASS %s", password);
  49. receive_ftp_response(sockfd);
  50. }
  51. // 列出FTP服务器的内容列表
  52. void list_contents(int sockfd) {
  53. send_ftp_command(sockfd, "LIST");
  54. receive_ftp_response(sockfd);
  55. }
  56. // 下载文件
  57. void download_file(int sockfd, const char* filename) {
  58. send_ftp_command(sockfd, "RETR %s", filename);
  59. receive_ftp_response(sockfd);
  60. }
  61. // 上传文件
  62. void upload_file(int sockfd, const char* filename) {
  63. send_ftp_command(sockfd, "STOR %s", filename);
  64. receive_ftp_response(sockfd);
  65. }
  66. // 删除文件或文件夹
  67. void delete_file(int sockfd, const char* filename) {
  68. send_ftp_command(sockfd, "DELE %s", filename);
  69. receive_ftp_response(sockfd);
  70. }
  71. // 重命名文件
  72. void rename_file(int sockfd, const char* oldname, const char* newname) {
  73. send_ftp_command(sockfd, "RNFR %s", oldname);
  74. receive_ftp_response(sockfd);
  75. send_ftp_command(sockfd, "RNTO %s", newname);
  76. receive_ftp_response(sockfd);
  77. }
  78. int main() {
  79. const char* server_ip = "127.0.0.1";
  80. int port = 21;
  81. const char* username = "your_username";
  82. const char* password = "your_password";
  83. // 连接FTP服务器
  84. int sockfd = connect_server(server_ip, port);
  85. if (sockfd < 0) {
  86. exit(1);
  87. }
  88. // 登录FTP服务器
  89. login_ftp_server(sockfd, username, password);
  90. // 执行FTP操作:列出内容列表、下载文件、上传文件、重命名文件、删除文件
  91. list_contents(sockfd);
  92. download_file(sockfd, "file.txt");
  93. upload_file(sockfd, "file.txt");
  94. rename_file(sockfd, "file.txt", "newfile.txt");
  95. delete_file(sockfd, "newfile.txt");
  96. // 关闭连接
  97. close(sockfd);
  98. return 0;
  99. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/354336
推荐阅读
相关标签
  

闽ICP备14008679号