ftp文件传输协议及实现

本文详细介绍了FTP文件传输协议的概念,它是互联网上用于文件下载和上传的标准。文章通过实例讲解了FTP协议如何实现,包括服务端和客户端的开发步骤,如套接字创建、数据收发、日志调试、命令结构体、文件长度和MD5计算、链表记录命令历史以及密码功能。同时,提到了常用的函数如fopen、popen、sscanf等在实现过程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

    //用户名
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值