FTP-成型版本
1. 旧知识回顾-反射
hasattr(object, name)
说明:判断对象object是否包含名为name的属性(方法)
测试代码如下:
class tt(object):
def __init__(self):
pass def AA(self):
self.name='Lucy'
def tes(self):
while True:
cmd=input(">>:").strip()
if hasattr(self,cmd): #用来判断对象object的属性(name表示)是否存在。
print('Yes,we have fun %s'%cmd)
else:
print("nonono...,we don't have this fun")
obj=tt()
obj.tes()
运行结果:
>>:AA
Yes,we have fun AA
>>:test
nonono...,we don't have this fun
>>:b
nonono...,we don't have this fun
>>:
2. 自己写的
服务器端脚本
import socketserver,os,json
class MYTCP(socketserver.BaseRequestHandler): #定义一个请求处理类
def handle(self): #重写handle函数
while True:
try:
self.data=self.request.recv(1024)
cmd_dic=json.loads(self.data.decode())
action=cmd_dic['action']
if hasattr(self,action):
func=getattr(self,action)
func(cmd_dic)
except ConnectionResetError as e:
print("Error is:",e)
break def put(self,*args):
cmd_dic=args[0]
filename=cmd_dic['filename']
filesize=cmd_dic['filesize']
if os.path.isfile(filename): #如果服务器上已经存在,则建一个新的
f=open(filename+'.new','wb')
else:
f=open(filename,'wb')
self.request.send(b'be ready to receive')
received_size=0
while received_size<filesize:
data=self.request.recv(1024)
received_size+=len(data)
f.write(data)
else:
f.close()
print("upload successfully") server=socketserver.ThreadingTCPServer(('localhost',9999),MYTCP) #实例化一个服务类
server.serve_forever() #调用服务类下面的serve_forever方法
客户端脚本:
import os,json,socket
class FtpClient(object):
def __init__(self):
self.client=socket.socket()
def help(self):
msg='''
ls
pwd
cd..
put filename
get filename
'''
print(msg)
def connect(self,ip,port):
self.client.connect((ip,port))
def interactive(self):
while True:
cmd=input(">>:").strip()
if len(cmd)==0:continue
cmd_str=cmd.split()[0]
if hasattr(self,'cmd_%s'%cmd_str):
func=getattr(self,'cmd_%s'%cmd_str)
func(cmd)
else:
self.help() def cmd_put(self,*args):
cmd_split=args[0].split()
if len(cmd_split)>1:
filename = cmd_split[1]
if os.path.isfile(filename):
filesize=os.stat(filename).st_size
cmd_dic={
'action':'put',
'filename':filename,
'filesize':filesize,
'overridden':True
}
self.client.send(json.dumps(cmd_dic).encode())
server_response=self.client.recv(1024)
f=open(filename,'rb')
for line in f:
self.client.send(line)
else:
f.close()
print('upload successfully') def cmd_get(self,*args):
pass
ftp=FtpClient()
ftp.connect('localhost',9999)
ftp.interactive()
FTP-成型版本的更多相关文章
- python作业Select版本FTP(第十周)
SELECT版FTP: 使用SELECT或SELECTORS模块实现并发简单版FTP 允许多用户并发上传下载文件 思路解析: 1. 使用IO多路复用的知识使用SELECTORS封装好的SELECTOR ...
- Web文件管理:elFinder.Net(支持FTP)
elFinder 是一个基于 Web 的文件管理器,灵感来自 Mac OS X 的 Finder 程序. elFinder.Net是.Net版本的一个Demo,使用ASP.NET MVC 4集成,可以 ...
- WRT 版本说明
std_generic 标准通用版nokaid 是不带XBOX支持的(Kai代表连接游戏平台到网络上.)virtual** 表示支持虚拟专用网络的版本VOIP 带VOIP表示支持网络电话的版本.meg ...
- linux下安装FTP详细
一:安装ftp 1.检查是否安装了 ftp :(下图是已安装的效果,没安装没有展示) rpm -qa|grep vsftpd 2.安装指令:(找一个 -y 指令) yum install -y v ...
- python作业高级FTP
转载自:https://www.cnblogs.com/sean-yao/p/7882638.html 作业需求: 1. 用户加密认证 2. 多用户同时登陆 3. 每个用户有自己的家目录且只能访问自己 ...
- 网络基础 Windows控制台下Ftp使用简介
Windows控制台下Ftp使用简介 by:授客 QQ:1033553122 测试环境: ftp服务器所在主机ip:172.25.75.2 ftp用户目录:F:\ftp C:\Users\laif ...
- python作业简单FTP(第七周)
作业需求: 1. 用户登陆 2. 上传/下载文件 3. 不同用户家目录不同 4. 查看当前目录下文件 5. 充分使用面向对象知识 思路分析: 1.用户登陆保存文件对比用户名密码. 2.上传用json序 ...
- 外网访问内网的FTP服务器-原理解析
1. 背景简介 最近研究如何在内网搭架FTP服务器,同时要保证外网(公网)能访问的到.终成正果,但走了一些弯路,在此记下,以飨后人. 2. 基础知识 FTP 使用 2 个端口,一个数据端口和一个命令端 ...
- python作业高级FTP(第八周)
作业需求: 1. 用户加密认证 2. 多用户同时登陆 3. 每个用户有自己的家目录且只能访问自己的家目录 4. 对用户进行磁盘配额.不同用户配额可不同 5. 用户可以登陆server后,可切换目录 6 ...
- Serv-u 外网访问内网的FTP服务器
1. 背景简介 最近研究如何在内网搭架FTP服务器,同时要保证外网(公网)能访问的到.终成正果,但走了一些弯路,在此记下,以飨后人. 2. 基础知识 FTP 使用 2 个端口,一个数据端口和一个命令端 ...
随机推荐
- Ubentu编译Android源码(AOSP)
前言: 一直想要编译一下Android 源码,之前去google 看,下载要下载repo. 当时很懵逼,repo 是个什么?(repo 是一个python 脚本,因为Android 源码git 仓库太 ...
- MyBatis-SpringMVC整合
1.添加spring相关jar包 2.配置ehcache jar包. 3.添加ehcache mybatis 适配器jar包(在mybatis官网) 4.添加spring mybatis 适配器jar ...
- 微信小程序学习笔记(1)- 按钮触发的函数的定义以及不同页面之间的数据传递
<view class='item' bindtap='onCountryTab' data-idx='4'> 1)bindtap属性用来设置控件需要绑定的函数,函数用单引号括起来:. 2 ...
- 『Python Kivy』Kivy模板语言KV说明
语言概念 KV语言允许你以声明的方式创建控件树,以及绑定控件属性到其他的控件或使用一种自然的方式进行回调. 它允许非常快速并灵活的改变你的UI. 它还可以让你的应用程序与应用程序的界面进行分隔. 如何 ...
- hdu1051 Wooden Sticks(贪心+排序,逻辑)
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- thinkphp5使用workerman的定时器定时任务在某一个时间执行
1.首先通过 composer 安装workerman,在thinkphp5完全开发手册的扩展->coposer包->workerman有详细说明: #在项目根目录执行以下指令compos ...
- SQL注入篇二------利用burp盲注,post注入,http头注入,利用burpsuit找注入点,宽字节注入
1.布尔盲注burpsuit的使用 先自己构造好注入语句,利用burpsuit抓包,设置变量,查出想要的信息. 比如----查数据库名的ascii码得到数据库构造好语句 http://123.206. ...
- Selenium 入门到精通系列:二
Selenium 入门到精通系列 PS:用户登录 例子 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-04-23 16:12 ...
- MATLAB实现连续周期信号的频谱分析(正余弦波信号举例)
关于MATLAB实现连续信号的频谱分析,以正余弦波信号频谱分析为例分析如下: 1.含有频率f ,2f和3f的正弦波叠加信号,即: 其中,f =500Hz.试采用Matlab仿真软件对该信号进行频谱分析 ...
- [JSON].toXMLString()
语法:[JSON].toXMLString() 返回:[String] 说明:将[JSON]实例转换成XML格式结果. 示例: <% jsonString = "{div: 'hell ...