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简介 #线程 #一道单一的指令的控制流,寄生在进程中 #单一进程里的多个线程是共享数据的 #多个线程涉及修改共享数据的时候需要枷 ...
随机推荐
- block、inline、inline-block
block: block - 块级元素 常见的块级元素包括:div,form,p,table,ul,ol,dl,h1~h6,pre block 可以包含 inlne 和 block 和 inline- ...
- java4
1:如何制作帮助文档(了解) (1)写一个类 (2)加入文档注释 (3)通过javadoc工具生成即可 javadoc -d 目录 -author -version ArrayTool.java 2: ...
- [Linux]系统调用理解(2)
本文介绍了Linux下的进程概念,并着重讲解了与Linux进程管理相关的4个重要系统调用getpid,fork,exit和_exit,辅助一些例程说明了它们的特点和使用方法. 关于进程的一些必要知识 ...
- Angular2 入门
1. 说明 该文档为Angular2的入门文档,可以根据该文档的内如做出一个“helloworld”类型的Angualr2入门程序,通过该文档可以初步了解Angular2的相关知识以及开发流程,同时搭 ...
- Bravebeart
E - Bravebeart Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Sub ...
- 使用jquery实现单选框、多选框取消选中状态
function radioReset(){ /*方式一*/ /* var radios = $("input[type='radio']"); for (i=0; i<ra ...
- 【python】确保文件写入结束
今天遇到了个问题: 我在执行如下代码时发现,文件只写了一半.也就是说,当文件量过大时,下面的代码是不能保证文件被正确写入的. fd = open('test.txt','w') fd.write(&q ...
- Git学习总结
master主分支合并dev分支,代码 :git merge dev ,跳出如下界面.输入:wq,(:wq命令是LINUX命令,强制写入文件并结束),可以强制合并.但为什么会跳出该界面,我也没搞清楚. ...
- 仿qq联系人 学习笔记---ExpandableListActivity的使用
[转]原地址 http://blog.163.com/xygzx@126/blog/static/237809502011102010100331/ 效果显示图: 1.布局文件 main.xml(E ...
- Spring事务管理
Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring的事务管理分为声明式跟编程式.声明式就是在Spring的配置文件中进行相关配置 ...