用python编写一个合格的ftp程序,思路是怎样的?
经验
1.一般在比较正规的类中的构造函数。都会有一个verify_args函数,用于验证传入参数。尤其是对于系统传参。
2.并且系统传参,其实后面大概都是一个函数名
例如:python server.py start #start就是server.py里面一个函数,一般在一个类里面
3. 所以verify_args就要用反射判断
if hasattr(server,'start'):
start = getattr(server,'start')
4.对比在构造函数里面,直接self.start()写死的做法。这个方法的优点是,可以调用不止于start,可以调用类似help,restrart等。具有强大的可扩展性。即能升能缩
5.根据这个思路,可以在类里面添加help方法,系统传参,python server.py help
6. 在条件判断语句中,要注意一下判断(父子类)顺序,同级情况下,应该由子类先来
技巧
1) 思考思路时,先保证‘前提’可以实现,不要本末倒置。
2)边写边测试,验证逻辑是否成功,即使服务器端也是一样,初步定义一个可以反馈结果的客户端进行连接。可以善用print进行占位,目的是显示逻辑供以认证
3)编码时:先写逻辑,先占位
4) 若可以有明确的分组,例如一前一后(处理发送,接收处理),最好分函数编写
5)若存在交互,一定要保证对应好,需要一步一步验证。没编写甲方的一步,就要编写乙方的一步,然后测试交互。
6) 切忌不要复杂化,一定要简单化,简单化!!!不到万不得以时不要把问题复杂化。
重零到一
一.起步阶段
1)创建好所有文件夹
2)首先进入的事配置文件,配置好IP_PORT
3) modules文件夹内创建main.py,里面创建LogicHandler类。先pass
4)进入bin,创建入口。入口处创建逻辑类对象
二.主逻辑设计阶段
逻辑设计。由于没有要交互的对象,所以说此类是披着面向对象的面相过程。使用面向过程思想设计
从服务器端的视角出发
1)输入help参数,显示帮助信息
2)输入start参数,启动服务器
3)启动成功后,若有客户端链接上来,接受链接并进入验证阶段,收到客户端的账号密码
4)读取db下的user.cfg文件进行验证,发送验证失败的通知码和成功提示
5)若成功,保存用户名,保存用户家目录路径,进入命令交互阶段。
6)编写命令交互函数,收到的是以各种函数名开头的命令,使用反射对命令进行分发。
7)依次编写各类函数
8)被分发函数初步定义的是start(),真正地负责启动整个服务器,由于需要用到并发,需要socketserver,所以
要在modlues创建一个ServerHandler.py ,定义ServerHandler类。还是一样,先pass,测试逻辑
三、进入ServerHandler类
1)由于指定要覆写handle函数,所以进入handle函数。先价格while True的循环接收
2)设计出协议头,{'action':'auth','username':'ziyi','password':'123'},也就是第一次接受到的1024字节就是这个json字符串,可以用''' ‘’‘ 字符串在函数中加以注释
编写client,因为需要通信测试功能
1)还是verify_args,因为涉及到系统传递ip和端口。返回ip_port用于链接
2)定义make_connection用于接收ip_port参数链接服务器。注意 self.sock在这里初始化最好
四、编写服务器的交互函数。
编写客户端交互函数
1)想要的情况是 c=ClientHandler()
c.interactive()
2)客户端交互函数第一步就是调用认证功能
五、编写客户端认证功能
1)分两个函数authenticate,get_auth_result,前者获得input输入,后者获得服务器反馈。
2)服务器收到客户端的加工报文后,先打印出来
边写边验证:先不要急着处理先print打印出来是不是和设想的一样。不这样做后面出问题就浪费很多时间。
六、回到客户端交互函数继续完善。
1)构想是借由input函数获得输入,加工后分发到类的其他函数。
2)首先是upload函数,文件上传函数
七、编写客户端文件上传函数。
1)产生json字符串,action键指定为‘upload',先编写发送部分,接收部分待服务器验收之后编写
2)然后编写服务器对应的上传服务函数。
用python编写一个合格的ftp程序,思路是怎样的?的更多相关文章
- day-1 用python编写一个简易的FTP服务器
从某宝上购买了一份<Python神经网络深度学习>课程,按照视频教程,用python语言,写了一个简易的FTP服务端和客户端程序,以前也用C++写过聊天程序,编程思路差不多,但是pytho ...
- 006-使用python编写一个猜数字的程序
题目:随机生成一个数字,共有三次机会对该数字进行猜测. #功能点# 1.猜错的时候给出提示,告诉用户输入的值是大了还是小了# 2.最多提供三次机会# 3.随机生成需要猜的数字答案 编写思路: 1.刚开 ...
- 基于python编写的天气抓取程序
以前一直使用中国天气网的天气预报组件都挺好,可是自从他们升级组件后数据加载变得非常不稳定,因为JS的阻塞常常导致网站打开速度很慢.为了解决这个问题决定现学现用python编写一个抓取程序,每天定时抓取 ...
- 用Python编写简单的发红包程序和计算器原理
用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成 ...
- Python编写的桌面图形界面程序实现更新检测和下载安装
在Python中我们有很多种方案来编写桌面图形用户界面程序,譬如内置的 Tkinter .强大的 PyQt5 和 PySide2 ,还有 wxPython .借助这些或内置或第三方的模块,我们可以轻松 ...
- 编写一个简单的C++程序
编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...
- 用C语言编写一个简单的词法分析程序
问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...
- 用Python编写一个简单的Http Server
用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...
- 使用 python 编写一个授权登录验证的模块
使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...
随机推荐
- LC 774. Minimize Max Distance to Gas Station 【lock,hard】
On a horizontal number line, we have gas stations at positions stations[0], stations[1], ..., statio ...
- 时间总线框架之EvenBus
概述 EventBus定义:是一个发布 / 订阅的事件总线. 这么说应该包含4个成分:发布者,订阅者,事件,总线. 那么这四者的关系是什么呢? 很明显:订阅者订阅事件到总线,发送者发布事件. 订阅者可 ...
- 安卓之Android.mk编写
题记:编译环境可以参考https://www.cnblogs.com/ywjfx/p/9960817.html 不管是写C还是java,我想所有的程序员都经历过HelloWorld程序的编写,现在让我 ...
- Oracle数据库提高sql查询效率总结
我们要做到不但会写SQL,还要做到写出性能优良的SQL语句. (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句 ...
- Excel不同版本差异性
apache poi-3.16.jar /* ==================================================================== Licensed ...
- C基础知识(10):预处理器
C预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤.简言之,C预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理. 所有的预处理器命令都是以井号(#)开 ...
- style属性
style加样式是加在行间,取样式也是在行间取: 我们来看下面这段代码: <!DOCTYPE HTML> <html> <head> <meta charse ...
- C#编程 socket编程之unity聊天室
上面我们创建了tcp的客户端和服务端,但是只能进行消息的一次收发.这次我们做一个unity的简易聊天室,使用了线程,可以使用多个客户端连接服务器,并且一个客户端给服务器发消息后,服务器会将消息群发给所 ...
- CornerNet 算法笔记
论文名称:CornerNet: Detecting Objects as Paired Keypoints 论文链接:https://arxiv.org/abs/1808.01244 代码链接:htt ...
- elk 概念整理 集群状态 - yellow - 面试的问题 -- 官方配置文档 水平扩容以及数据保障
1. primary shard -- raid0 2.replicas shard -- raid1 3.index -- 图书馆的借书指引 4.MySQL vs elasticsearch # ...