zoukankan      html  css  js  c++  java
  • #FTP

     1 #socketserver基本使用#服务器端
     2 '''
     3 1 你必须创建一个请求处理类。并且这个类要继承BaseRequestHandler,
     4         并且还要重写父亲类的handle()
     5 
     6 2 你必须实例化TCPServer,并且传递server ip 和你上面创建的请求处理类
     7         给这个TCPServer
     8 
     9 3 调用  Server.handle_request()#只处理一个请求
    10         Server.serve_forever()#处理多个请求,并且永远执行
    11         
    12 4 关闭服务
    13 '''
    14 
    15 
    16 #socketserver基本使用
    17 
    18 import os
    19 import json
    20 
    21 import socketserver
    22 
    23 class MyTCPHandler(socketserver.BaseRequestHandler):
    24 
    25     def put(self,*args):
    26         #接收客户端文件
    27         cmd_dic = args[0]
    28         filename = cmd_dic['filename']
    29         filesize = cmd_dic['size']
    30         if os.path.isfile(filename):
    31             f = open(filename + '.new','wb')
    32         else:
    33             f = open(filename ,'wb')
    34 
    35         self.request.send(b'200 ok')#返回json格式
    36         received_size = 0
    37         while received_size < filesize:
    38             data = self.request.recv(1024)
    39             f.write(data)
    40             received_size += len(data)
    41         else:
    42             print ('file[%s] has uploaded...' % filename)
    43 
    44     
    45     def handle(self):
    46         while True:
    47             try:
    48                 self.data =self.request.recv(1024).strip()
    49                 print ('{} wrote:'.format(self.client_address[0]))
    50                 print (self.data)
    51 
    52                 cmd_dic = json.loads(self.data.decode())
    53                 action = cmd_dic['action']
    54 
    55                 if hasattr(self,action):
    56                     func = getattr(self,action)
    57                     func(cmd_dic)
    58 
    59                 #self.request.send(self.data.upper())
    60             except ConnectionResetError as e:
    61                 print ('err,e')
    62                 break
    63 
    64 
    65 
    66 
    67 if __name__ == '__main__':
    68     
    69     HOST,PORT = 'localhost',9999
    70     #HOST,PORT = '0.0.0.0',9999
    71     
    72     server = socketserver.TCPServer((HOST,PORT),MyTCPHandler)
    73     server.serve_forever()
    #socketserver基本使用#服务器端
      1 #FTP client
      2 
      3 #socketserver基本使用#客户端
      4 '''
      5 1 你必须创建一个请求处理类。并且这个类要继承BaseRequestHandler,
      6         并且还要重写父亲类的handle()
      7 
      8 2 你必须实例化TCPServer,并且传递server ip 和你上面创建的请求处理类
      9         给这个TCPServer
     10 
     11 3 调用  Server.handle_request()#只处理一个请求
     12         Server.serve_forever()#处理多个请求,并且永远执行
     13         
     14 4 关闭服务
     15 '''
     16 
     17 
     18 
     19 
     20 import socket
     21 import os
     22 import json
     23 
     24 class FtpClient(object):
     25     def __init__(self):
     26 
     27         self.client = socket.socket()
     28     def help(self): #帮助信息
     29         msg = '''
     30             ls
     31             pwd
     32             cd ../..
     33             get filename
     34             put filename
     35               '''
     36         print (msg)
     37 
     38     def connect(self,ip,port):  #连接
     39         
     40         #self.client.connect(('localhost',9999))
     41         
     42         self.client.connect((ip,port))
     43         
     44 
     45     def interactive(self): #交互
     46 
     47         #self.authenticate()  #登录判断
     48         while True:
     49             cmd = input('>>').strip()
     50 
     51             if len(cmd) == 0:continue
     52 
     53             cmd_str = cmd.split()[0]
     54 
     55             if hasattr(self,'cmd_%s'% cmd_str): #反射
     56                 func = getattr(self,'cmd_%s'%cmd_str)
     57                 func(cmd)
     58             else:
     59                 self.help()
     60 
     61     def cmd_put(self,*args):
     62         cmd_split = args[0].split()
     63         if len(cmd_split) > 1 :
     64             filename = cmd_split[1]
     65             if os.path.isfile(filename):
     66                 filesize = os.stat(filename).st_size
     67                 
     68                 #msg_str = '%s|%s' %(filename,filesize)#要考虑长远,不建议使用
     69                 msg_dic = {
     70                     'action'     :  'put'      ,
     71                     'filename'   :  filename   ,
     72                     'size'       :  filesize   ,
     73                     'overridden' :  True
     74                            }
     75 
     76                 self.client.send(json.dumps(msg_dic).encode("utf-8"))
     77                 #防止粘包,等服务器确认(标准请求码404)
     78                 print ('send',json.dumps(msg_dic).encode("utf-8"))
     79                 server_response = self.client.recv(1024)
     80                 f = open (filename,'rb')
     81                 for line in f:
     82                     self.client.send(line)
     83 
     84                 else:
     85                     print ('file upload usccess...')
     86 
     87                     f.close()
     88                 
     89             else:
     90                 print (filename,'isnot exist')
     91 
     92     def cmd_get(self):
     93         pass
     94 
     95 
     96 ftp = FtpClient()
     97 
     98 ftp.connect('localhost',9999)
     99 
    100 ftp.interactive()
    #socketserver基本使用#客户端
      1 #  """和'''要区分好
      2 
      3 print('-----------寻找当前环境目录路径--------')
      4 import sys,os
      5 a = os.path.abspath(__file__)
      6 b = os.path.dirname(os.path.abspath(__file__))
      7 c = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
      8 d = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
      9 
     10 print(a)
     11 print(b)
     12 print(c)
     13 print(d)
     14 
     15 
     16 print('--------创建新目录开始-----------')
     17 
     18 
     19 def mkdir(path):
     20     # 引入模块
     21     import os
     22  
     23     # 去除首位空格
     24     path=path.strip()
     25     # 去除尾部  符号
     26     path=path.rstrip("\")
     27  
     28     # 判断路径是否存在
     29     # 存在     True
     30     # 不存在   False
     31     isExists=os.path.exists(path)
     32  
     33     # 判断结果
     34     if not isExists:
     35         # 如果不存在则创建目录
     36         print(path+'创建成功')
     37         # 创建目录操作函数
     38         os.makedirs(path)
     39         return True
     40     else:
     41         # 如果目录存在则不创建,并提示目录已存在
     42         print (path+'目录已存在')
     43         return False
     44  
     45 # 定义要创建的目录
     46 m = '\'+input('目录名称:')
     47 mkpath = c+m
     48 # 调用函数
     49 mkdir(mkpath)
     50 print('--------创建新目录完成-----------')
     51 
     52 
     53 print('--------创建  module_alex.py 开始-----------')
     54 data1="""
     55 
     56 #FTP client
     57 
     58 #socketserver基本使用#客户端
     59 
     60 
     61 import socket
     62 import os
     63 import json
     64 
     65 class FtpClient(object):
     66     def __init__(self):
     67 
     68         self.client = socket.socket()
     69     def help(self): #帮助信息
     70 
     71 
     72         msg = '''
     73 
     74             ls
     75             pwd
     76             cd ../..
     77             get filename
     78             put filename
     79          
     80               '''
     81 
     82 
     83         print (msg)
     84 
     85     def connect(self,ip,port):  #连接
     86         
     87         #self.client.connect(('localhost',9999))
     88         
     89         self.client.connect((ip,port))
     90         
     91 
     92     def interactive(self): #交互
     93 
     94         #self.authenticate()  #登录判断
     95         while True:
     96             cmd = input('>>').strip()
     97 
     98             if len(cmd) == 0:continue
     99 
    100             cmd_str = cmd.split()[0]
    101 
    102             if hasattr(self,'cmd_%s'% cmd_str): #反射
    103                 func = getattr(self,'cmd_%s'%cmd_str)
    104                 func(cmd)
    105             else:
    106                 self.help()
    107 
    108     def cmd_put(self,*args):
    109         cmd_split = args[0].split()
    110         if len(cmd_split) > 1 :
    111             filename = cmd_split[1]
    112             if os.path.isfile(filename):
    113                 filesize = os.stat(filename).st_size
    114                 
    115                 #msg_str = '%s|%s' %(filename,filesize)#要考虑长远,不建议使用
    116                 msg_dic = {
    117                     'action'     :  'put'      ,
    118                     'filename'   :  filename   ,
    119                     'size'       :  filesize   ,
    120                     'overridden' :  True
    121                            }
    122 
    123                 self.client.send(json.dumps(msg_dic).encode("utf-8"))
    124                 #防止粘包,等服务器确认(标准请求码404)
    125                 print ('send',json.dumps(msg_dic).encode("utf-8"))
    126                 server_response = self.client.recv(1024)
    127                 f = open (filename,'rb')
    128                 for line in f:
    129                     self.client.send(line)
    130 
    131                 else:
    132                     print ('file upload usccess...')
    133 
    134                     f.close()
    135                 
    136             else:
    137                 print (filename,'isnot exist')
    138 
    139     def cmd_get(self):
    140         pass
    141 
    142 
    143 ftp = FtpClient()
    144 
    145 ftp.connect('localhost',9999)
    146 
    147 ftp.interactive()
    148 
    149 #socketserver基本使用#客户端
    150 
    151 """
    152 
    153 
    154 sys.path.append(d)
    155 ls = input('文件名称:')
    156 f = open (mkpath + '\'+ ls + '.py','w+',encoding='utf-8')
    157 f.write(data1)
    158 
    159 
    160 f.flush()
    161 f.close()
    162 print(f)
    163 print('--------创建 module_alex.py 完毕-----------')
    自动创建"""和'''要区分好
  • 相关阅读:
    什么是ORM
    ORM优缺点
    Azure 中快速搭建 FTPS 服务
    连接到 Azure 上的 SQL Server 虚拟机(经典部署)
    在 Azure 虚拟机中配置 Always On 可用性组(经典)
    SQL Server 2014 虚拟机的自动备份 (Resource Manager)
    Azure 虚拟机上的 SQL Server 常见问题
    排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
    上传通用化 VHD 并使用它在 Azure 中创建新 VM
    排查在 Azure 中新建 Windows VM 时遇到的部署问题
  • 原文地址:https://www.cnblogs.com/ujq3/p/7341830.html
Copyright © 2011-2022 走看看