概念:文件传输协议(FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。
项目简介:
1.基本功能:实现实现ls,get,put,cd,quit操作。
2.高级功能:实现用户名密码验证,传输文件的md5校验,查看历史记录等功能。
项目实现流程:
1.构建服务端以及客户端,采用动态输入端口号。
服务端:
1.1.socket函数:套接字(设置TCP/UDP)
1.2.bind函数:IP号端口号与相应描述字赋值函数。
1.3listen函数:监听设置函数;
1.4accept函数:连接。
客户端:
1.1socket函数;
1.2connect函数;
2.构建日志模块。
功能:用于存放调试信息,以便及时查错,进行针对性修改。
#include "log.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdarg.h>
FILE *fd = NULL;
void log_open(char *buf) {
fd = fopen(buf, "a+");
if (fd == NULL) {
printf("打开失败\n");
exit(-1);
}
}
void log_write(const char *pszFormat, ...) {
va_list args;
va_start(args, pszFormat);
vfprintf(fd, pszFormat, args);
va_end(args);
fflush(fd);
}
void log_close() {
fclose(fd);
}
3.功能实现。
客户端成功连接服务端后,即可对服务端文件进行远程操作。客户端通过键盘输入命令,告知服务端我想要进行什么样的操作,服务端收到后,进行相关操作,并将相关信息反馈给客户端。简单来说服务端不断的读取来自客户端的命令,收到命令后去进行相关操作,然后再发送回客户端。客户端则不断检测用户是否输入命令,当输入命令后,将相关信息发送给服务端,然后读取服务端反馈回来的信息。
这个不断在两端进行收发的信息,我们用结构体定义,因为其内部参数较多。
struct Msg{
20 //命令get
21 enum FTP_CMD cmd;
22
23 //命令的参数 get test.c
24 char args[32];
25 ....
26 char okes[32];
27 //md5
28 char md5[64];
29 ....
30 //shi ji du qu zi jie;
31 int data_length;
32
33 //test.c的内容,长度未知
34 ch