Python:从socket开始,搭建一个最基本功能的FTP服务器(附源码)

摘要:这是一个对应客户端为windows资源管理器的简单FTP服务器,支持上传,下载,新建文件夹,删除,重命名,不支持用户。

题外话:我们网络设计实验要求做的客户端,题目一看错,以为要写服务端,结果辛辛苦苦写了大半之后才知道,后悔已经来不及……就只好硬着头皮先把这个做完。当时写这东西的时候找不到网上教怎么做的(目测大神们都觉得太简单……),源码倒是不少,而自己水平太低,源码基本没法看(这真不是自谦,看pyftpdlib的时候觉得那是一个天书),只好自己边研究源码边折腾。

最后做出来250行,基本功能倒也不难实现,但水平有限什么异常处理,什么库,根本不会,更不用说什么框架……

同样完成一个功能,具体下来有各种各样的实现方法,所谓提高不仅仅是会实现某个功能,还包括以更快的实现它,更成熟的代码风格,更有效的实现思路,更合理的利用已有的库和架构,这些才是一个高手和码农的差异所在。

FTP协议简介

FTP协议,File Transfer Protocol,就是有关文件传输的协议,除了传输文件(上传、下载),协议还支持在服务器进行简单的文件修改操作,如,删除,重命名,新建文件夹。使得客户访问服务器上的文件就像访问本地文件一样。同时支持用户机制,可以给不同用户不同权限。

基本流程及框架

FTP服务器中,为了保证多用户登入,以及用户操纵不因传输数据被打断,所采用的多线程机制如下图所示


关于PORT模式和PASV模式。

这两种模式是关于传输数据时新开端口的一个约定

PORT模式约定,由客户端打开一个端口,然后在控制连接上告知服务器该端口号,服务器连接上。

PASV模式,也就是本文中所实现的模式。

1、控制连接上,客户端发送PASV命令给服务器

2、服务器开启一个端口,监听,并把该端口号返回给客户端

3、客户端连接该端口

一次完整的流程,以LIST命令为例

客户端

服务端

21号端口监听

发起连接请求,输入用户名

——》

《——

返回331,用户名正确

输入密码

——》

《——

返回230,密码正确

PASV命令

——》

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值