用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 小时 ...
随机推荐
- springboot启动报错:Failed to configure a DataSource
一.背景 springboot的出现,让项目搭建变得更方便快捷,同时简化掉很多的样板化配置代码,提高开发效率. 通过idea生成springboot项目,启动报错:Failed to configur ...
- 七十:flask钩子函数之关于before_request的钩子函数
在flask中钩子函数是使用特定的装饰器装饰的函数,用于在正常执行的代码中,插入一段自己想要执行的代码(hook) before_first_request:flask项目第一次部署后指向的钩子函数, ...
- Nginx 日志打印POST数据
在工作中,开发希望能从Nginx日志中获取POST的数据信息,先记录下来 在日志格式后面加上 $request_body 配置信息 log_format main '$remote_addr - $r ...
- idea 错误: 找不到或无法加载主类 xxx.xxx.xxxxx
idea 错误: 找不到或无法加载主类 xxx.xxx.xxxxx JDK环境,maven项目还是ee还是web项目,是否都正常. 如果是用idea打开的话,在源码目录上点击右键,然后找到Mark d ...
- Python学习小技巧之列表项的排序
Python学习小技巧之列表项的排序 本文介绍的是关于Python列表项排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍: 典型代码1: data_list = [6, 9, 1, ...
- 使用robotframework做接口测试之一——准备工作
最近发现做接口测试的朋友越来越多了,打算写一个系列的rf+requests做接口测试(主要是Http接口)的文档,可以帮助新入门的同学对接口测试有个大概的了解,同时也是敦促自己做总结的一种手段.希望经 ...
- 串口使用和CSerial类
1 串口通信的基本原理 串口通信中无论是写入串口还是读取串口,都是对缓冲区操作的.可以理解为写串口就是向输出缓冲区写入内容,读取串口就是从输入串口缓冲区读取内容.但是何时打开串口,何时发送数据,何时接 ...
- LeetCode.1071-字符串最大公约数(Greatest Common Divisor of Strings)
这是小川的第391次更新,第421篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第253题(顺位题号是1071).对于字符串S和T,当且仅当S = T + ... + T ...
- 使用choco 在windows 环境安装kubectl 并配置
首先安装choco #以管理员身份运行cmd命令 @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -N ...
- 喝奶茶最大值(不能喝自己班级的)2019 Multi-University Training Contest 8--hdu杭电第8场(Roundgod and Milk Tea)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6667 题意: 有 n个班级,每个班级有a个人.b个奶茶,每个班的人不能喝自己的奶茶,只能喝别人班的奶茶 ...