用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 656. Coin Path 【lock, Hard】
Given an array A (index starts at 1) consisting of N integers: A1, A2, ..., AN and an integer B. The ...
- shell做成csv文件
echo a,b,c,d >aa.csv 其实就是用逗号做分隔符
- ElementTree 无法处理中文
ElementTree.fromstring() 导入xml格式时,是可以选择解析parser的编码的,并且 它解析出来的node类型是 严谨且严格的,不会 自己内部全部转换成str,比如 9.87 ...
- 如何解决使用 JMeter 时遇到的问题
这是对 JMeter 官方网站上一篇文章的翻译.点击这里可以访问原文JMeterTroubleShooting. • check the log file. This is normally in t ...
- pagehelper用法
spring boot 和 mybatis 中使用 pagehelper: 1. 在pom.xml 中加入pagehelper的引用: <dependency> <groupId&g ...
- 嵌入式【杂记--手机芯片与pc】
手机.身边的移动设备大多数是嵌入式计算机,pc也是计算机,只是功耗上很大. 手机所采用的大多数芯片是英国ARM公司的架构coretom A系列 core, Intel公司采用自己的架构设计的芯片适用于 ...
- vuejs与angularjs以及react的区别?
1.与AngularJS的区别 相同点: 都支持指令:内置指令和自定义指令. 都支持过滤器:内置过滤器和自定义过滤器. 都支持双向数据绑定. 都不支持低端浏览器. 不同点: 1.AngularJS的学 ...
- script学习,如何用linux监控你的同事?
环境:CentOS7 一.为什么要学习script命令 当你在终端或控制台上工作时,你想记录下自己做了些什么吗?当你跟一些Linux管理员同时在系统上干活,你想知道别人干了什么吗?当你让别人远程到你的 ...
- webhooks动态更新配置
config server 项目中加入 monitor依赖 <dependency> <groupId>org.springframework.cloud</groupI ...
- 华为HCNA乱学Round 9:VRRP