基于epoll的ftp服务器

epollFTP是一个基于epoll的高性能FTP服务器,对比前一版本,此版采用epoll进行I/O多路复用,提升并发能力,修复了多个bug,包括上传空文件导致的阻塞、CD命令目录深度问题等,同时改进了数据报格式和错误信息处理。服务器支持ls、help、cd、get、put、quit等常见FTP命令。

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

基于epoll的ftp服务器

对比上一个版本,这个版本主要就是把服务器换成了epoll版本,并修复了许多小bug

  • 接收到的命令,返回数据,工作目录等都是分用户独立出来的
  • 修复上传空文件会导致阻塞在read的情况
  • 增加cd错误目录报错
  • 修复cd目录深度问题
  • 重新修订传输数据报格式
  • 解决报错信息收不到问题
  • 修复多次传输报错信息的错误

然后新的数据包格式如下

  • 消息数据报

开头是一个sizeof(int)大小的整形,-1代表后面的数据是报错信息,不是-1代表是正常的信息

接下来也是sizeof(int)大小的整形,代表后面数据的大小

再后面接的是真实的数据

  • 传输文件数据报

开头是一个sizeof(int)大小的整形,代表后面数据 的大小,并且根据这个大小和buf缓冲区的大小作比较来判断是否传输完毕

后面接的是真实的数据

  • 每个用户自己的数据结构如下

    typedef struct Data{
    int fd;                     //sockfd
    char cmd[CMDSIZE];               //用户输入的命令
    char rebuf[MAXLINE];             //保存服务器回传的数据,一般是错误信息
    int size;                       //rebuf的大小
    int inuse;                  //此data是否在被使用
    char current_path[MAXLINE];   //保存当前用户工作目录
    int indeep;                  //报错工作目录深度,避免无限向上cd
    }data;
  • 各文件依赖图

    IMG_20180824_093728

手画的,画的有点烂,但是能看清哈。

其中 a—>b 箭头表示a include b这个文件。

  • 完善目标

    加入登录功能。完善用户各种状态信息。服务器端客户端往返数据规范化。

  • 命令说明

    • 编译,已经写好了makefile,直接make就行

    • ls用法

    ls

    获取到服务器端的文件目录

    • help用法
    help

    获取到服务器端支持命令列表

    • cd命令
    cd ..
    cd .
    cd xxx

    和linux上用法一样

    • get
    get filename

    获取到当前目录下的filename文件,默认存储在./recvftp文件夹内

    • put
    put 绝对路径

    上传文件到服务器,注意这里是绝对路径

    • quit
    quit

    单纯的退出指令,只退出客户端。

源码在我的github上
https://github.com/xixihahag/epollftp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值