已经好久没有写过博客进行分享了。具体原因,在以后说。

  这几天在了解FTP协议,准备任务是写一个FTP客户端程序。直接上干货了。

0.了解FTP作用

  就是一个提供一个文件的共享协议。

1.了解FTP协议

  FTP有指令和响应码。FTP 控制帧即指 TELNET 交换信息,包含 TELNET 命令和选项。然而,大多数 FTP 控制帧是简单的 ASCII 文本,可以分为 FTP 命令或 FTP 消息。 FTP 消息是对 FTP 命令的响应,它由带有解释文本的应答代码构成。

  像这种利用交换信息来进行简单的控制,这种协议,还真的很好玩的说。 命令与响应码部分信息如下

  Socket网络编程--FTP客户端(1)(Windows)

  Socket网络编程--FTP客户端(1)(Windows)

2. 安装一个FTP服务器

  我们先安装一个FTP服务器,用于测试,这里是用FileZilla Server作为FTP服务器。

Socket网络编程--FTP客户端(1)(Windows)

  启动后,增加一个用户user/user

3.FTP客户端源代码讲解

  下面这个是FTPAPI.h文件

 1 #ifndef FTPAPI_H_INCLUDED
 2 #define FTPAPI_H_INCLUDED
 3 
 4 #include <stdio.h>
 5 #include <winsock2.h>
 6 
 7 SOCKET socket_connect(char *host, int port);
 8 SOCKET connect_server(char *host, int port);
 9 int ftp_sendcmd_re(SOCKET sock, char *cmd, char *re_buf, ssize_t *len);
10 int ftp_sendcmd(SOCKET sock, char *cmd);
11 int login_server(SOCKET sock, char *user, char *pwd);
12 void socket_close(int c_sock);
13 
14 
15 /**********可用命令*********/
16 SOCKET ftp_connect(char *host, int port, char *user, char *pwd); //连接到服务器
17 int ftp_quit(SOCKET sock); //断开连接
18 int ftp_type(SOCKET sock, char mode); //设置FTP传输类型
19 int ftp_cwd(SOCKET sock, char *path); //更改工作目录
20 int ftp_cdup(SOCKET sock); //回到上级目录
21 int ftp_mkd(SOCKET sock, char *path); //创建目录
22 SOCKET ftp_pasv_connect(SOCKET c_sock); //连接到PASV接口
23 int ftp_list(SOCKET c_sock, char *path, char **data, int *data_len); //列出FTP工作空间的所有目录
24 int ftp_deletefolder(SOCKET sock, char *path); //删除目录
25 int ftp_deletefile(SOCKET sock, char *filename); //删除文件
26 int ftp_renamefile(SOCKET sock, char *s, char *d); //修改文件/目录&移动文件/目录
27 int ftp_server2local(SOCKET c_sock, char *s, char *d, int * size); //从服务器复制文件到本地 RETR
28 int ftp_local2server(SOCKET c_sock, char *s, char *d, int * size); //从本地复制文件到服务器 STOR
29 int ftp_recv(SOCKET sock, char *re_buf, ssize_t *len); //获取响应码
30 
31 
32 #endif // FTPAPI_H_INCLUDED
View Code

相关文章: