首页 > 代码库 > python学习道路(day9note)(socketserver编程,ftp)

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 =http://www.mamicode.com/ {
 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) #发送给客户端需要循环单次长度

 

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