zoukankan      html  css  js  c++  java
  • FTP上传功能

    ##服务端
    import socket,struct,json,os class MYTCPServer: address_family=socket.AF_INET socket_type=socket.SOCK_STREAM allow_reuse_address=False max_packet_size=8192 coding='utf-8' request_queue_size=5 server_dir='file_upload' def __init__(self,server_address,bind_and_activate=True): self.server_address=server_address self.socket=socket.socket(self.address_family,self.socket_type) if bind_and_activate: try: self.server_bind() self.server_activate() except: self.server_close() def server_bind(self): if self.allow_reuse_address: self.socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) self.socket.bind(self.server_address) self.server_address=self.socket.getsockname() # 返回的就是元组('127.0.0.1', 8080) def server_activate(self): self.socket.listen(self.request_queue_size) def server_close(self): self.socket.close() def get_request(self): return self.socket.accept() def close_request(self,request): request.close() def run(self): while True: self.conn,self.client_addr=self.get_request() print('from client',self.client_addr) while True: try: head_struct=self.conn.recv(4) if not head_struct:break head_len=struct.unpack('i',head_struct)[0] head_json=self.conn.recv(head_len).decode('utf-8') head_dic=json.loads(head_json) print(head_dic) #head_dic={'cmd':'put','filename':'a.txt','filesize':123123} cmd=head_dic['cmd'] if hasattr(self,cmd): func=getattr(self,cmd) func(head_dic) except Exception: break self.close_request(self.conn) def put(self,args): file_path=os.path.normpath(os.path.join(self.server_dir,args['filename'])) #os.path.normpath返回该文件的完整路径.文件名 filesize=args['filesize'] recv_size=0 print('----->',file_path) with open(file_path,'wb') as f: while recv_size < filesize: recv_data = self.conn.recv(self.max_packet_size) f.write(recv_data) recv_size+=len(recv_data) print('recvsize:%s filesize:%s' %(recv_size,filesize)) tcpserver1=MYTCPServer(('127.0.0.1',8080)) tcpserver1.run()
    #os.path.normpath  返回某个文件的完整路径及文件名 
    #os.path.baaename 返回上述完整路径的文件名
    print(os.path.isfile('F:wangkcday08s4.py'))  #True 
    print(os.path.getsize('F:wangkcday08s4.py')) #2264

    #客户端
    import socket,struct,json,os
    
    class MYTCPClient:
        address_family=socket.AF_INET
        socket.type=socket.SOCK_STREAM
        allow_reuse_address=False
        max_packet_size=8192
        coding='utf-8'
        request_queue_size=5
        def __init(self,server_address,connect=True):
            self.server_address=server_address
            self.socket=socket.socket(self.address_family,self.socket_type)
            if connect:
                try:
                    self.client_connect()
                except:
                    self.client_close()
                    raise
        def client_connect(self):
            self.socket.connect(self.server_address)
        def client_close(self):
            self.socket.close()
        def run(self):
            while True:
                inp=input('>>: ').strip()
                if not inp:continue
                l=inp.split()
                cmd=l[0]
                if hasattr(self,cmd):
                    func=getattr(self,cmd)
                    func(l)
    
        def put(self,args):
            cmd=args[0]
            filename=args[1]
            if not os.path.isfile(filename):
                print('file:%s is not exists' % filename)
                return
            else:
                filesize=os.path.getsize(filename)
    
            head_dic={'cmd':cmd,'filename':os.path.basename(filename),'filesize':filesize}
            print(head_dic)
            head_json=json.dumps(head_dic)
            head_json_bytes=bytes(head_json,encoding=self.coding)
            head_len_struct=struct.pack('i',len(head_json_bytes))
            self.socket.send(head_len_struct)
            self.socket.send(head_json_bytes)
            send_size=0
            with open(filename,'rb') as f:
                for line in f:
                    self.socket.send(line)
                    send_size+=len(line)
                    print(send_size)
                else:
                    print('upload successful')
    
    client=MYTCPClient(('127.0.0.1',8080))
    client.run()
    
     
    
    
    
    

     

  • 相关阅读:
    在pytorch中使用可视化工具visdom
    3"GAN-GAN实战:GD的实现
    31:GAN-js散度的缺陷以及解决办法:WGAN的提出
    31:GAN-DCGAN(deconvolution GAN逆卷积操作)以及JS散度的缺陷
    31:GAN-纳什均衡
    31:GAN-GAN原理
    30:无监督学习-自编码网络的变种
    30:无监督学习-自编码(Auto-Encoder简称AE)原理
    如何打印网络的参数量
    29:迁移学习(当数据集比较小时,可以使用迁移学习达到一个更好的效果)
  • 原文地址:https://www.cnblogs.com/wangkc/p/7072520.html
Copyright © 2011-2022 走看看