1. FTP介绍
(1)主动模式(PORT): 服务器主动去连接客户端的数据端口
(2)被动模式(PASV): 客户端主动去连接服务器的数据端口
ftp客户端通信流程(编程流程)如下:1. 客户端用账号、密码进行登录。 2. 提交主动模式还是被动模式。 3. 如果是被动模式,需要去连接服务器开放的数据传输端口4. 发送指令到服务器的控制端口,获取服务器返回结果5. 上传文件夹、上传文件6. 下载文件夹、下载文件
2. 相关函数介绍
ftp中封装的相关函数太多,只介绍主要的函数。
2.1 dir_list.c (构建目录下文件链表)
以某一个目录下全都是普通文件,不包含子目录来讲解。(因为感觉存在子目录时代码有问题)
数据结构:
//目录或文件节点
typedef struct _dir_node
{char *file_name; //文件(目录名)名,例如:aaa.txtchar *dir_name; //绝对路径文件名,例如:/home/root/aaa.txtint is_dir; //1表示是目录文件,2表示是普通文件
}dir_node;//目录链表:存储某个目录下的所有文件
typedef struct _dir_list
{dir_node **list; //指向文件节点指针的指针int count; //当前目录下的文件计数int is_local; //1:表示是本地客户端中目录。 该标志在下载或上传时会用到//0:表示是ftp服务器中目录
}dir_list;
重要函数
/*该函数做的事情:(1)创建了一个dir_list目录链表结构;(2)创建了length个dir_node *指针,并让dir_list.list指向这些。
*/
(1)dir_list* create_dir_list(int length,int dir_is_local)/*该函数做的事情:(感觉该函数有bug)(1)把一个目录下所有文件(包括目录文件,但除了.和..)加入到目录链表中(2)如果该目录下的最后一个文件是目录文件,则将子目录下的文件也加入到目录链表中(递归)注意:如果存在子目录,则该函数可能存在问题
*/
(2)int get_dir_list(dir_list *p_dir_list,char *cur_dir)
最终得到的结果