FTP文件传输协议
文件传输协议的概念:
FTP是文件传输协议是INTERNET用户在计算机之间传输文件所使用的协议,用于文件的“下载”和“上传”。 FTP(File Transfer Protocol)是文件传输协议,它规定了在Internet网络上怎样传输文件,通常要由专门的FTP程序来具体实现。 简而言之,即用于连接服务端与客户端,使它们能够进行文件的传输。
传输过程:
实例(文件传输协议,通过网络传送文件)
1、架构(服务端、客户端)
Socket服务器和客户端的开发步骤:
1.创建套接字
2.为套接字添加信息IP地址和端口号
3.监听网络连接
4.监听到有客户端接入-〉接收一个连接
5.数据交互
6.关闭套接字,断开连接
所使用的函数·:
int socket(int domain, int type, int protocol);
int bind(int sockfd,const struct sokaddr *addr,socklen_t addrlen);
//bind()函数:IP号端口号与相应描述字赋值函数
listen()函数:监听设置函数
accept()函数
数据收发相关函数
通常使用这一种收发函数:
客户端的connect函数
2、日志函数,用于调试找出错误
log.h
#ifndef LOG_H
#define LOG_H
void log_create();
void log_destory();
void log_write(const char *format, ...);
#endif
log.c
#include<stdio.h>
#include<stdarg.h>
#include"log.h"
FILE *g_log = NULL;
//创建日志,前缀
void log_create(char *name)
{
g_log = fopen(name,"a+");
if(NULL == g_log){
printf("fopen mylog.txt failed\n");
}
}
//销毁
void log_destory()
{
fclose(g_log);
//不想变成野指针
g_log = NULL;
}
//写入
void log_write(const char *format, ...)
{
//1 定义va_list变量
va_list args;
//2 创建
va_start(args,format);
vfprintf(g_log,format,args);
//3 销毁
va_end(args);
//4 强制写入
fflush(g_log);
}
注: fflush()函数可以将缓冲区信息强制写入文件,防止无法写入信息,必须存在
3、命令结构体函数(设定相关功能)
msg.h
#ifndef MSG_H
#define MSG_H
enum FTP_CMD {
//ls
FTP_CMD_LS = 0,
//get 下载
FTP_CMD_GET = 1,
//put 上传
FTP_CMD_PUT = 2,
//quit 断开连接
FTP_CMD_QUIT = 3,
//cd 切换服务端目录
FTP_CMD_CD = 4,
//密码
FTP_CMD_AUTH = 5,
//历史记录
FTP_CMD_HIST = 6,
//无效命令
FTP_CMD_ERROR,
};
struct Msg{
//命令get
enum FTP_CMD cmd;
//命令参数
char args[32];
//md5校验值
char md5[64];
//获取data(文件)长度
int data_leng;
//data
char data[5000];
};
struct Auth{ //验证用户密码功能
enum FTP_CMD cmd;
//用户名