Skip to content

maverick-zhang/ftp_server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于libevent的简易Ftp Server

目前实现的功能:

  • 匿名登录,PWD,CWD,CDUP,LIST,PORT,RETR,STOR。即支持匿名登录,文件列表获取,切换目录,文件上传和下载。
  • 暂未实现:中文字符支持,文件删除,重命名......

业务处理逻辑:

  1. 每一个连接映射到一个CMD命令控制任务类,用于保存连接信息比如工作路径,数据传输端口,客户端ip,libevent事件循环的base类,两个通信的bufferevent_event事件cmd_bev和data_bev分别对于命令传输和数据传输。当cmd_bev读事件触发时,即接收到了客户端的命令,对命令进行解析,分发给具体的命令类进行处理。当客户端连接断开后,释放资源,删除CMD控制类。
  2. 首先服务器启动,创建线程池。每一个子线程维护一个管道用于和主线程通信,并且维护一个FIFO(使用STL的list实现)任务队列。主线程添加任务,子线程取出任务,因此队列需要使用互斥锁保证安全。子线程创建并开启libevent事件循环,并把管道的一端加入事件。
  3. 主线程中创建libevent事件循环以及监听事件(evconnlistner),监听21端口。当连接进入时,监听回调函数调用,创建一个CMD控制任务,类采用轮询的方式在线程池中取一个线程,并把该类添加到线程的任务队列中,并向该线程的管道写入一个字符以通知子线程。
  4. 子线程在收到主线程的通知后,从任务队列中取出一个CMD命令控制任务,并对该任务类进行初始化:创建cmd_bev建立和客户端的连接,并把该cmd_bev时间加入到子线程的libevent事件循环中等待指令。
  5. 当收到具体指令后,cmd_bev调用回调函数对指令进行处理。当指令为LIST、RETR和STOR时,建立数据通道data_bev用于传输数据。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors