经验
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程序,思路是怎样的?的更多相关文章

  1. day-1 用python编写一个简易的FTP服务器

    从某宝上购买了一份<Python神经网络深度学习>课程,按照视频教程,用python语言,写了一个简易的FTP服务端和客户端程序,以前也用C++写过聊天程序,编程思路差不多,但是pytho ...

  2. 006-使用python编写一个猜数字的程序

    题目:随机生成一个数字,共有三次机会对该数字进行猜测. #功能点# 1.猜错的时候给出提示,告诉用户输入的值是大了还是小了# 2.最多提供三次机会# 3.随机生成需要猜的数字答案 编写思路: 1.刚开 ...

  3. 基于python编写的天气抓取程序

    以前一直使用中国天气网的天气预报组件都挺好,可是自从他们升级组件后数据加载变得非常不稳定,因为JS的阻塞常常导致网站打开速度很慢.为了解决这个问题决定现学现用python编写一个抓取程序,每天定时抓取 ...

  4. 用Python编写简单的发红包程序和计算器原理

    用Python编写简单的发红包程序: 第一种解法:数轴方法解决 import random def red_packet(money,num): money = money * 100 #将钱数转换成 ...

  5. Python编写的桌面图形界面程序实现更新检测和下载安装

    在Python中我们有很多种方案来编写桌面图形用户界面程序,譬如内置的 Tkinter .强大的 PyQt5 和 PySide2 ,还有 wxPython .借助这些或内置或第三方的模块,我们可以轻松 ...

  6. 编写一个简单的C++程序

    编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main.操作系统通过调用main来运行C++程序.下面是一个非常简单的main函数,它什么也不干, ...

  7. 用C语言编写一个简单的词法分析程序

    问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法 ...

  8. 用Python编写一个简单的Http Server

    用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...

  9. 使用 python 编写一个授权登录验证的模块

    使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...

随机推荐

  1. Windows下Elasticsearch安装问题处理

    按ES官网的安装方法正常安装就行了.可能遇到的其他问题. 1.报jvm.dll不存在. 只需要重新安装JDK过后,会有jdk1.8.0_73目录和jre1.8.0_73目录.因为java就喜欢玩这种“ ...

  2. Ironic 的 Rescue 救援模式实现流程

    目录 文章目录 目录 救援模式 实现 UML 图 救援模式 以往只有虚拟机支持救援模式,裸机是不支持的.直到 Queen 版本 Ironic 实现了这个功能.救援模式下,用户可以完成修复.Troubl ...

  3. 五十二:WTForms表单验证之基本使用

    作用:1.做表单验证,把用户提交的数据验证是否合法2.做模板渲染 安装:pip install wtforms 表单验证1.自定义一个表单类,继承wtforms.Form2.定义好需要验证的字段,字段 ...

  4. Void pointers in C

    In this article we are learning about “void pointers” in C language. Before going further it will be ...

  5. Asp.Net Core 反向工程

    反向工程1.反向工程是实体类型类和一个基于数据库架构的 DbContext 类的基架的过程2.Scaffold-DbContext(数据库上下文脚手架)    使用Scaffold-DbContext ...

  6. Mac上解决Chrome浏览器跨域问题

    最近做前端开发总是遇到一个很奇怪的现象,同一个AJAX请求,在Chrome里调试的时候就会提示跨域,但是在手机模拟器或者真机上调试的时候就不会,于是百度了一下,发现是Chrome的安全策略导致的,需要 ...

  7. 【AMAD】django-guradian -- 为Django加入单个对象级别的权限

    动机 简介 个人评分 动机 django默认的permission系统就是将将能用的程度.默认授权会将一个数据表所有数据的权限都授予,而现实世界不是这样.很多时候,我们仅想授权数据的一小部分给用户. ...

  8. 云计算共享组件--消息队列rabbitmq(3)

    一.MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 消息传 ...

  9. python 连接SQL SERVER 并读取其数据

    1.没什么难的操作 安装  pip install pymssql import pymssql #引入pymssql模块 import pandas as pd def conn(): connec ...

  10. USACO4.4 Frame Up【拓扑排序】

    题意居然还读了好久... 读完题目之后大概就知道拓扑排序了.用拓扑可以求出一些字母之间的关系,谁先,谁后.但是这个关系不是唯一确定的,所以就会产生多种方案(题目还要求按字典序输出所有的方案) 输出方案 ...