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简介 #线程 #一道单一的指令的控制流,寄生在进程中 #单一进程里的多个线程是共享数据的 #多个线程涉及修改共享数据的时候需要枷 ...
随机推荐
- PHP PHPUnit的简单使用
1.window安装pear的教程:http://jingyan.baidu.com/article/ca41422fd8cf3d1eae99ed3e.html 2.在工作目录下,放两个文件: 1)C ...
- .NET 获取类型中的属性
解决方案 通过反射的方式获取类型中的所有属性. 引用命名空间 using System.Reflection; 实体类 public class User { private string ...
- 时间戳与日期时间互转C语言
/* * ctime.h * * Created on: May 19, 2016 * Author: root */ #ifndef CTIME_H_ #define CT ...
- iOS10 SiriKit QQ适配详解
原文连接 1. 概述 苹果在 iOS10 开放了 SiriKit 接口给第三方应用.目前,QQ已经率先适配了 Siri 的发消息和打电话功能.这意味着在 iOS10 中你可以直接告诉 Siri 让它帮 ...
- sqlserver 行列转换
http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html PIVOT用于将列值旋转为列名(即行转列),在SQL Server 200 ...
- execl表格VLOOKUP函数的使用
使用场景:最近在处理一个表格数据的时候出现了一点麻烦.想把另外表2里面对应的的数据放到表1里面,本来表2的ID是乱序的(这里为好看,就顺序排了.),一个个查找复制粘贴比较麻烦,后经大师指点VLOOKU ...
- [Unity3D插件]2dToolKit系列三 碰撞检测功能的实现以及障碍物的随机摆放
貌似有一段时间没更新2dtoolkit系列了,这段时间一直在忙着其他事情,今天开始继续这个插件系列的教程,网上搜索,貌似关于这个插件的教程无非还是跟官方的教程很类似,有的甚至都没有自己照着亲手实践一遍 ...
- Angular2表格/可排序/table
Angular2表格 1. 官网下载Angular2开发环境,以及给出的quickstart代码示例demo(地址如下),具体步骤不在详述. https://github.com/angular/qu ...
- IIS服务器允许跨域配置
<configuration> <system.webServer> <httpProtocol> <customHeaders> <add na ...
- C#将数据大小字节转换为MB,GB,TB
http://www.myluoluo.com/c%E5%B0%86%E6%95%B0%E6%8D%AE%E5%A4%A7%E5%B0%8F%E5%AD%97%E8%8A%82%E8%BD%AC%E6 ...