• #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 完毕-----------')
    自动创建"""和'''要区分好
  • 相关阅读:
    腾讯TBS加载网页无法自适应记录
    filter过滤器实现验证跳转_返回验证结果
    Oracle不连续的值,如何实现查找上一条、下一条
    springmvc.xml 中 <url-pattern></url-pattern>节点详解
    spring拦截器-过滤器的区别
    (转)spring中的拦截器(HandlerInterceptor+MethodInterceptor)
    @Value("${xxxx}")注解的配置及使用
    mybatis BindingException: Invalid bound statement (not found)
    spring声明式事务管理方式( 基于tx和aop名字空间的xml配置+@Transactional注解)
    Spring事务管理详解_基本原理_事务管理方式
  • 原文地址:https://www.cnblogs.com/ujq3/p/7341830.html
Copyright © 2020-2023  润新知