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简介 #线程 #一道单一的指令的控制流,寄生在进程中 #单一进程里的多个线程是共享数据的 #多个线程涉及修改共享数据的时候需要枷 ...
随机推荐
- mapReduce编程之Recommender System
1 协同过滤算法 协同过滤算法是现在推荐系统的一种常用算法.分为user-CF和item-CF. 本文的电影推荐系统使用的是item-CF,主要是由于用户数远远大于电影数,构建矩阵的代价更小:另外,电 ...
- 百度地图用ip获取当前位置的经纬度(高精度)
步骤比较简单先上百度地图API官网,申请一个应用AK(访问凭据):查看一下高进度定位的API,看看是否都符合要求下面直接上代码 /** * 根据ip获取地理坐标 * @param ip * @retu ...
- C#夯实基础系列之字符串
string作为我们在编程当中用的最多的数据类型,同时又由于它的特殊性,怎么强调它的重要性都不为过,理解string的一些类型和存储机制,有助于我们写出正确且高效的代码. 一.string类型 1.s ...
- ecshop中foreach的详细用法归纳
ec模版中foreach的常见用法. foreach 语法: 假如后台:$smarty->assign('test',$test); {foreach from=$test item=list ...
- 修改hosts文件,修改后不生效怎么办
当你在打开浏览器的情况下修改hosts文件时,关闭浏览器时系统才会释放掉hosts文件占用的那部分内存,我们再次打开浏览器访问就发现已经生效了. ps:ipconfig /flushdns # ...
- C# mongodb 驱动操作(Z)
Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.And(Query.EQ("nam ...
- SQL入门语句之ORDER BY 和GROUP BY
一.SQL入门语句之ORDER BY ORDER BY 是用来基于一个或多个列按升序或降序顺序排列数据 1.从数据库表获取全部数据按字段A的升序排列 select *from table_name o ...
- iOS - 使用自定义字体-苹方字体
苹方提供了六个字重,font-family 定义如下:苹方-简 常规体font-family: PingFangSC-Regular, sans-serif;苹方-简 极细体font-family: ...
- B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用
B树是为磁盘存储而专门设计的一类平衡搜索树,B树的高度仅随着它所包含的节点数按对数增长,不过因为单个节点可以包含多个关键字,所以对数的底数可以比较大,实际应用中一般是50~2000,给个直观的数字,一 ...
- 低功耗蓝牙BLE之连接事件、连接参数和更新方法
转自:http://blog.csdn.net/zzfenglin/article/details/51304084 连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包.一个连接事件 ...