python学习道路(day9note)(socketserver编程,ftp)

1.ftp client

 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3
 4
 5 import socket
 6 import subprocess
 7
 8 user_data = {
 9     ‘user‘:None,
10 }
11
12 user_status = False   #用户验证,只是当用户可以链接的时候需要去验证一下用户密码
13 def login():
14     count = 0
15     global user_status
16     while True:
17         user_name = input("请输入您的用户名>>>:")
18         with open(‘D:\\kkk\\day5work\\db.txt‘, ‘r‘,encoding="utf-8") as files:
19             for i in files.readlines():  #整行读取
20                 if user_name in i: #空格为分隔符生成字典
21                     while True:
22                         passwd = input("请输入您的密码>>>:")
23                         if str(passwd) == str(i.split(‘ ‘)[-1].strip(‘\n‘)):#上面空格分隔符后面的密码
24                             user_data[‘user‘] = user_name
25                             #print(user_data[‘user‘]) 调试用的可以删除
26                             user_status = True
27                             break
28                         else:
29                             count += 1
30                         if count >= 3:
31                             print(‘input passwd error‘)
32                             exit("您输入过多次错误密码,将被锁定:")  #锁定的方法还没有实现上去
33         if user_status == True:
34             break
35 login()
36 if user_status == True:
37     print("1111")
38
39
40 client = socket.socket()
41 client.connect((‘10.10.10.140‘,8002))    #客户端需要链接的Ip  和  端口
42 while True:
43     msg = input(‘>>>:‘).strip()  #用户输入想要执行的命令
44     if len(msg) == 0: continue  #判断无输入继续
45     print(‘to server‘, msg)
46     client.send(‘put‘)
47     if ‘put‘ in msg:
48         res_obj = subprocess.Popen(‘cat filename‘, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) #本地查看文件长度
49         res = res_obj.stdout.read()  # 执行命令的结果
50         client.send(str(len(res)).encode())  # 命令执行结果的长度字符串一下
51         client.send(res)  # 发送给客户端需要循环单次长度
52
53     if ‘get‘ in msg:
54         client.send(msg.encode())  #将用户输入的命令编码,只接收二进制文件
55         date = client.recv(1024)   #接收的文件字符数
56         print("res:",date.decode())
57         total_size = int(date.decode())  #将接收的字符串解码并整型
58         recevied_size = 0    #标识
59         res = b‘‘
60         while recevied_size < total_size:   #接收大小与总数相比
61             d = client.recv(1024)
62             res += d
63             old = open("filename.txt", "r+", encoding="utf-8")
64             old.write(d)
65             recevied_size += len(d)     #每次循环加上之前获取的大小
66         # print("rece done----")
67         # print(res.decode())
68
69     if ‘put‘ in msg:
70         client.send(msg.encode())  # 将用户输入的命令编码,只接收二进制文件
71         date = client.recv(1024)  # 接收的文件字符数
72         print("res:", date.decode())
73         total_size = int(date.decode())  # 将接收的字符串解码并整型
74         recevied_size = 0  # 标识
75         res = b‘‘
76         while recevied_size < total_size:  # 接收大小与总数相比
77             d = client.recv(1024)
78             res += d
79             old = open("filename.txt", "r+", encoding="utf-8")
80             old.write(d)
81             recevied_size += len(d)  # 每次循环加上之前获取的大小
82     #(家目录应该是字符串的拼接吧)

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) #发送给客户端需要循环单次长度
时间: 2024-10-13 22:31:43

python学习道路(day9note)(socketserver编程,ftp)的相关文章

python学习_处理数据编程实例(一)

目的:用一个实例总结学习到的with语句,函数,列表推导,集合,排序,字符分割等内容 要求:分别以james,julie,mikey,sarah四个学生的名字建立文本文件,分别存储各自的成绩,时间格式都精确为分秒,时间越短成绩越好,分别输出每个学生的无重复的前三个最好成绩,且分秒的分隔符要统一为"." 数据准备:分别建立四个文本文件 james.txt     2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22 julie.txt        2

python学习道路(day8note)(抽象类,类的方法,异常处理,socket编程)

1.#面向对象 #抽象接口 === 抽象类 #就是架构师给你一个架子,你们去写,如果满足不了直接报错 1 #python2 2 print("python2---抽象类".center(20,'#')) 3 import abc #需要在python2中测试,如果直接运行会报错 4 #因为没有调用send方法 5 class Alert(object): 6 '''报警基类''' 7 __metaclass__ = abc.ABCMeta 8 @abc.abstractmethod 9

Python学习之==&gt;Socket网络编程

一.计算机网络 多台独立的计算机通过网络通信设备连接起来的网络.实现资源共享和数据传递.在同一台电脑上可以将D盘上的一个文件传到C盘,但如果想从一台电脑传一个文件到另外一台电脑上就要通过计算机网络 二.网络编程 所谓网络编程就是通过某种计算机语言来实现不同设备间的资源共享和信息传递.计算机网络的创造比计算机本身的意义更大,否则我们现在还玩着单机游戏,也没有现在蒸蒸日上的互联网行业. 1.OSI模型 OSI模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架.OSI模型把网络通信的

python学习过程之IO编程

IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题.两种处理方法同步IO和异步IO. 很明显,使用异步IO来编写程序性能会远远高于同步IO,但是异步IO的缺点是编程模型复杂,反正异步IO的复杂度远远高于同步IO. 操作IO的能力都是由操作系统提供的,每一种编程语

Python学习十一:函数式编程

这也是我第一接触函数式编程这个概念,并不知道是干嘛的?好奇心驱使下学习了一下,有了大致的了解: 函数式编程自己的理解:就跟说话一样写程序,这个程序写出来可以直白的告诉人是要干嘛的. 以下是我读到的关于函数式编程的文章的描述: 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数![1] 函数式编程的准则:不依赖于外部的数据,而且也不改变外部数据的值,而是返回一个新的值给你.[2] 函数式编程的理念:把函数当成变量来用,关注于描述问题而不是怎么实现,这样可以让代码更易

python学习笔记11 ----网络编程

网络编程 网络编程需要知道的概念 1.网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. 网络(OSI)的7层模型: 应用层--->为应用程序提供网络通信服务 表示层--->数据表示 会话层--->主机间通信(两个应用进程间) 传输层--->端到端的连接,隔离网络的上下层协议,使得网络应用与下层协议无关 网络层--->寻找最优路径,转发数据包 数据链路层---&

Python学习笔记之网络编程

操作MySQL # 断言 assert(1==1) ############################################################################# ******************************************************************** # 创建Connection * ------------------------------------------------------------

python学习道路(day11note)(协程,同步与异步的性能区别,url爬网页,select,RabbitMq)

1.协程 1 #协程 又称微线程 是一种用户的轻量级线程 程序级别代码控制 就不用加机器 2 #不同函数 = 不同任务 A函数切到B函数没有进行cpu级别的切换,而是程序级别的切换就是协程 yelied 3 4 #单线程下多个任务流用协程,比如打电话可以切换,nginx 5 #爽妹给你打电话的时候,她不说话,刘征电话过来时候你可以切过去,这时候要是爽妹说话,就会bibi响 6 ''' 7 8 协程的好处: 9 无需线程上下文切换的开销 10 无需原子操作锁定及同步的开销 11 "原子操作(ato

python学习道路(day7note)(subprocess模块,面向对象)

1.subprocess模块   因为方法较多我就写在code里面了,后面有注释 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #linux 上调用python脚本 5 #os.system输出命令结果到屏幕,返回命令执行状态 6 #os.popen("dir") 返回内存对象,需要单独去取一下 7 #os.popen("dir").read() 保存命令的执行结果输出,但是不返回执行状态 8 # 9 10 #p