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)的更多相关文章

  1. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  2. python学习之路网络编程篇(第二篇)

    新课程知识的引入:python作用域 #python中无块级别作用域 if 1 == 1 : name = 'alex' print(name) for i in range(10): name = ...

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

    1.#面向对象 #抽象接口 === 抽象类 #就是架构师给你一个架子,你们去写,如果满足不了直接报错 #python2 print("python2---抽象类".center(2 ...

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

    网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...

  5. python学习笔记10 ----网络编程

    网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...

  6. Python学习之==>Socket网络编程

    一.计算机网络 多台独立的计算机通过网络通信设备连接起来的网络.实现资源共享和数据传递.在同一台电脑上可以将D盘上的一个文件传到C盘,但如果想从一台电脑传一个文件到另外一台电脑上就要通过计算机网络 二 ...

  7. python 学习笔记7 面向对象编程

    一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...

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

    1.协程 #协程 又称微线程 是一种用户的轻量级线程 程序级别代码控制 就不用加机器 #不同函数 = 不同任务 A函数切到B函数没有进行cpu级别的切换,而是程序级别的切换就是协程 yelied #单 ...

  9. python学习道路(day10note)(线程,进程)

    1.计算机的发展史 看alex的博客吧,了解一下可以了 2.线程与GIL简介 #线程 #一道单一的指令的控制流,寄生在进程中 #单一进程里的多个线程是共享数据的 #多个线程涉及修改共享数据的时候需要枷 ...

随机推荐

  1. 【ZJOI2013】k大数查询 BZOJ 3110

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  2. jquery--常用的函数2

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. espcms简约版的表单,提示页,搜索列表页

    模板/lib/form.html <script type="text/javascript" src="{%$rootdir%}js/My97DatePicker ...

  4. Oracle分析函数(一)

    一.总体介绍 分析函数如何工作 语法 FUNCTION_NAME(<参数>,…) OVER (<PARTITION BY 表达式,…> <ORDER BY 表达式 < ...

  5. Ehlib安装方法有窍门

    Ehlib安装方法有窍门,如果不知道该安装方法,很难成功安装,Delphi 7(D5.D6也如此)中的安装方法       1.把EhLib中的common和DataService文件拷贝到Delph ...

  6. Pyqt SpVoice朗读功能

    用Pyqt 做一个读取系统剪贴板内容,然后通过语音合成(TTS)朗读出剪贴板的内容 知识要点 SpVoice SpVoice类是支持语音合成(TTS)的核心类.通过SpVoice对象调用TTS引擎,从 ...

  7. 【Java EE 学习 24 下】【注解在数据库开发中的使用】【反射+注解+动态代理在事务中的应用service层】

    一.使用注解可以解决JavaBean和数据库中表名不一致.字段名不一致.字段数量不一致的问题. 1.Sun公司给jdbc提供的注解 @Table.@Column.@Id.@OneToMany.@One ...

  8. SourceTree安装教程和GitLab配置详解

    一.安装Git 链接: http://pan.baidu.com/s/1mh7rICK 密码: 48dj 二.安装SourceTree 链接: http://pan.baidu.com/s/1skWk ...

  9. history.back新页面跳转

    今天遇到一个问题,页面跳转失效,原因在于原来在本页面打开的页面现在改为在新页面打开,历史url记录找不到了,所以不能向上一个地址跳转,解决的办法是使用$_SERVER['HTTP_REFERER']获 ...

  10. Linux 小命令

    查看 cat  文件名     [查看里面的内容,cate,猫,像猫一样瞄一眼的看] more 文件名   [查看文件,文件太多,一次看不完,用 more 来查看 下一页:空格或 f   下一行:回车 ...