python学习道路(day9note)(socketserver编程,ftp)
1.ftp client
#!/usr/bin/env python
#_*_coding:utf-8_*_
import socket
import subprocess
user_data = {
'user':None,
}
user_status = False #用户验证,只是当用户可以链接的时候需要去验证一下用户密码
def login():
count = 0
global user_status
while True:
user_name = input("请输入您的用户名>>>:")
with open('D:\\kkk\\day5work\\db.txt', 'r',encoding="utf-8") as files:
for i in files.readlines(): #整行读取
if user_name in i: #空格为分隔符生成字典
while True:
passwd = input("请输入您的密码>>>:")
if str(passwd) == str(i.split(' ')[-1].strip('\n')):#上面空格分隔符后面的密码
user_data['user'] = user_name
#print(user_data['user']) 调试用的可以删除
user_status = True
break
else:
count += 1
if count >= 3:
print('input passwd error')
exit("您输入过多次错误密码,将被锁定:") #锁定的方法还没有实现上去
if user_status == True:
break
login()
if user_status == True:
")
client = socket.socket()
client.connect(('10.10.10.140',8002)) #客户端需要链接的Ip 和 端口
while True:
msg = input('>>>:').strip() #用户输入想要执行的命令
if len(msg) == 0: continue #判断无输入继续
print('to server', msg)
client.send('put')
if 'put' in msg:
res_obj = subprocess.Popen('cat filename', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) #本地查看文件长度
res = res_obj.stdout.read() # 执行命令的结果
client.send(str(len(res)).encode()) # 命令执行结果的长度字符串一下
client.send(res) # 发送给客户端需要循环单次长度
if 'get' in msg:
client.send(msg.encode()) #将用户输入的命令编码,只接收二进制文件
date = client.recv(1024) #接收的文件字符数
print("res:",date.decode())
total_size = int(date.decode()) #将接收的字符串解码并整型
recevied_size = 0 #标识
res = b''
while recevied_size < total_size: #接收大小与总数相比
d = client.recv(1024)
res += d
old = open("filename.txt", "r+", encoding="utf-8")
old.write(d)
recevied_size += len(d) #每次循环加上之前获取的大小
# print("rece done----")
# print(res.decode())
if 'put' in msg:
client.send(msg.encode()) # 将用户输入的命令编码,只接收二进制文件
date = client.recv(1024) # 接收的文件字符数
print("res:", date.decode())
total_size = int(date.decode()) # 将接收的字符串解码并整型
recevied_size = 0 # 标识
res = b''
while recevied_size < total_size: # 接收大小与总数相比
d = client.recv(1024)
res += d
old = open("filename.txt", "r+", encoding="utf-8")
old.write(d)
recevied_size += len(d) # 每次循环加上之前获取的大小
#(家目录应该是字符串的拼接吧)
2.ftp server
#!/usr/bin/env python
#_*_coding:utf-8_*_
import socket
import subprocess
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建实例
server.bind(("0.0.0.0",8002)) #监听所有IP,端口
server.listen(5) #排列监听主机数,不是并发
print("--------listen-----------")
while True:
conn,client_addr = server.accept() #接受客户端的链接
while True:
date = conn.recv(1024) # 接收客户端发过来的字符串的长度
if 'put' in date:
total_size = int(date.decode()) # 将接收的字符串解码并整型
recevied_size = 0 # 标识
res = b''
while recevied_size < total_size: # 接收大小与总数相比
d = conn.recv(1024)
old = open("filename.txt", "r+", encoding="utf-8")
old.write(d)
res += d
recevied_size += len(d) # 每次循环加上之前获取的大小
print("rece done----")
if 'get' in date:
res_obj = subprocess.Popen('cat filename',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) #在本机实行的命令
res = res_obj.stdout.read() #执行命令的结果
conn.send(str(len(res)).encode()) #命令执行结果的长度字符串一下
conn.send(res) #发送给客户端需要循环单次长度
python学习道路(day9note)(socketserver编程,ftp)的更多相关文章
- python学习之路网络编程篇(第四篇)
python学习之路网络编程篇(第四篇) 内容待补充
- python学习之路网络编程篇(第二篇)
新课程知识的引入:python作用域 #python中无块级别作用域 if 1 == 1 : name = 'alex' print(name) for i in range(10): name = ...
- python学习道路(day8note)(抽象类,类的方法,异常处理,socket编程)
1.#面向对象 #抽象接口 === 抽象类 #就是架构师给你一个架子,你们去写,如果满足不了直接报错 #python2 print("python2---抽象类".center(2 ...
- python学习笔记11 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- python学习笔记10 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- Python学习之==>Socket网络编程
一.计算机网络 多台独立的计算机通过网络通信设备连接起来的网络.实现资源共享和数据传递.在同一台电脑上可以将D盘上的一个文件传到C盘,但如果想从一台电脑传一个文件到另外一台电脑上就要通过计算机网络 二 ...
- python 学习笔记7 面向对象编程
一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...
- python学习道路(day11note)(协程,同步与异步的性能区别,url爬网页,select,RabbitMq)
1.协程 #协程 又称微线程 是一种用户的轻量级线程 程序级别代码控制 就不用加机器 #不同函数 = 不同任务 A函数切到B函数没有进行cpu级别的切换,而是程序级别的切换就是协程 yelied #单 ...
- python学习道路(day10note)(线程,进程)
1.计算机的发展史 看alex的博客吧,了解一下可以了 2.线程与GIL简介 #线程 #一道单一的指令的控制流,寄生在进程中 #单一进程里的多个线程是共享数据的 #多个线程涉及修改共享数据的时候需要枷 ...
随机推荐
- mysql存储过程学习
一.存储过程的创建 语法: CREATE PROCEDURE sp_name (参数)合法的SQL语句 mysql> delimiter // mysql> CREATE PROCEDUR ...
- WebStrom快捷键
WebStorm 是 JetBrains 推出的一款商业的 JavaScript 开发工具 任何一个编辑器都需要保存(ctrl + s),这是所有win平台上编辑类软件的特点,但是webstorm编辑 ...
- RobotFrameWork(四)变量运算与Evaluate
一.特殊变量运算: 执行结果: 二.Evaluate使用 函数释义:Evaluate是执行Python表达式,并返回执行结果 示例1: 执行结果: 示例2: 执行结果:
- 设置UITableView的separatorInset值为UIEdgeInsetsZero,分隔线不最左端显示的问题
一.问题描述 UITableView分割线要显示到最左端 查看UITableView的属性,发现设置separatorInset的值可以自定义分割线的位置. @property (nonatomic) ...
- ORACLE简单触发器
因工作需要,尝试写一些建议的触发器,下面为其中一例. //创建一个名为TRG_FIN_OPB_ACCOUNTCARD的触发器 create or replace trigger TRG_FIN_OPB ...
- Android root + 修改host
1.使用KingRoot下载手机版,安装后进行Root处理. 2.下载 RE文件管理器,安装后,打开应用,进入etc,找到host, 勾选,菜单中选择 以文本方式编辑,修改好之后,按返回键 ,提示保存 ...
- 【SSM】Eclipse使用Maven创建Web项目+整合SSM框架
自己接触ssm框架有一段时间了,从最早的接触新版ITOO项目的(SSM/H+Dobbu zk),再到自己近期来学习到的<淘淘商城>一个ssm框架的电商项目.用过,但是还真的没有自己搭建过, ...
- JSON.parse()和JSON.stringify()区别
parse用于从一个字符串中解析出json对象,如: var str = '{"name":"huangxiaojian","age":&q ...
- HTML5中的对象的拖拽
拖拽: draggable="true"页面上就能实现拖拽事件: ondragstart 拖拽开始事件 ondrag 拖拽中 ondragend 拖拽结束事件 投放区事件: ond ...
- Daily Scrum Meeting ——SecondDay
一.Daily Scrum Meeting照片 二.Burndown Chart 燃尽图是的粒度较大,今天并没完成具体的issues 三.项目进展 1.完成侧滑框,测试功能中 放张图 2.M层,编写参 ...