• python ftp上传


    server.py文件:

    #!/usr/bin/env python
    #coding:utf-8
    import SocketServer,os
    class MyServer(SocketServer.BaseRequestHandler):
        def handle(self):
            base_path = r'C:Users91135Desktop	est'
            conn = self.request
            print 'connected...'
            while True:
                pre_data = conn.recv(1024)
                #获取请求方法、文件名、文件大小
                cmd,file_name,file_size = pre_data.split('/')
                #已经接收文件的大小
                recv_size = 0
                #上传文件路径拼接
                file_dir = os.path.join(base_path,file_name)
                f = file(file_dir,'wb')
                Flag = True
                while Flag:
                    #未上传完毕,
                    if int(file_size)>recv_size:
                        #最多接收1024,可能接收的小于1024
                        data = conn.recv(1024) 
                        recv_size+=len(data)
                    #上传完毕,则退出循环
                    else:
                        #recv_size = 0
                        Flag = False
                        continue
                    #写入文件
                    f.write(data)
                print 'upload successed.'
                f.close()
     
    instance = SocketServer.ThreadingTCPServer(('127.0.0.1',9999),MyServer)
    instance.serve_forever()   
    

      

    client.py文件:

    #!/usr/bin/env python
    #coding:utf-8
    import socket,os
    ip_port = ('127.0.0.1',9999)
    sk = socket.socket()
    sk.connect(ip_port)
    #container = {'key':'','data':''}
    while True:
        input = raw_input('cmd and path:')#cmd和path之间用'/'分割
        cmd,path = input.split('/') 
        file_name = os.path.basename(path)
        file_size=os.stat(path).st_size
        sk.send(cmd+"/"+file_name+'/'+str(file_size))
        send_size = 0
        f= file(path,'rb')
        Flag = True
        while Flag:
            if send_size + 1024 >file_size:
                data = f.read(file_size-send_size)
                Flag = False
            else:
                data = f.read(1024)
                send_size+=1024
            sk.send(data)
        f.close()
        
    sk.close()
    

      

  • 相关阅读:
    C++格式化输入输出
    算法的时间复杂度和空间复杂度
    C++编程中const和#define的区别
    C#中结构体和类的区别
    SQL之删除触发器
    Windows添加和取消右键管理员权限
    SQL之trigger(触发器)
    SQL VIEW(视图)
    二分查找的实现
    C++中this指针
  • 原文地址:https://www.cnblogs.com/noticeable/p/15138155.html
Copyright © 2020-2023  润新知