用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 小时 ...
随机推荐
- 【makefile】make程序的命令行选项和参数
Make命令参数的典型序列如下所示: make [-f makefile文件名][选项][宏定义][目标] 这里用[]括起来的表示是可选的.命令行选项由破折号“–”指明,后面跟选项,如: make – ...
- props的写法
简写 props: ['demo-first', 'demo-second'] 带类型 props: { 'demo-first': Number, 'demo-second': Number } 带 ...
- Activity缓存方法
有a.b两个Activity,当从a进入b之后一段时间,可能系统会把a回收,这时候按back,执行的不是a的onRestart而是onCreate方法,a被重新创建一次,这是a中的临时数据和状态可能就 ...
- CallableStatement获得存储过程多个结果集
这里使用到的数据库为MySQL package com.dz.entity; import java.sql.*; public class Pro_inoutTest { public static ...
- EL表达式与JSTL标签库(一)
1.JSTL概述 JSTL标签库由标签库和EL表达式两个部分组成.JSTL标准标签库(Java Server Page Standard Tag Library),用来解决创建的页面的操作问题,包括输 ...
- Win10无线网络配置VMware的nat网络
1.在windows上用运行cmd,用ipconfig /all查看可用网络的dns服务器 2.配置VMnet8,其dns与本地的dns服务器相同 3.打开VMware Workstation 的编辑 ...
- Pandas使用细则
本文介绍pandas的使用,总结了我在机器学习过程中常使用到的一些方法等. #pandas学习 import pandas as pd import numpy as np import seabor ...
- Cisco的动态Nat、PAT
Lab_C(config)# interface Ethernet0/0 ip address 192.168.30.2 255.255.255.0 router rip network 172. ...
- java-字符
注意第16行处理方式.
- 【linux杂谈】centos6和centos7中固定IP的方法
众所周知,一大部分集合部署的应用服务器内网相互通信都是采用固定IP.在阿里云.腾讯云上申请的云服务器也是固定IP,这就意味着在云平台内部策略划拨肯定是也固定了IP(即便不是采取直接在系统内固定的方式) ...