成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Python Socketserver實現FTP文件上傳下載代碼實例

瀏覽:183日期:2022-08-01 08:35:15

一、Socketserver實現FTP,文件上傳、下載

目錄結構

Python Socketserver實現FTP文件上傳下載代碼實例

1、socketserver實現ftp文件上傳下載,可以同時多用戶登錄、上傳、下載

效果圖:

Python Socketserver實現FTP文件上傳下載代碼實例

Python Socketserver實現FTP文件上傳下載代碼實例

Python Socketserver實現FTP文件上傳下載代碼實例

二、上面只演示了下載,上傳也是一樣的,來不及演示了,上代碼

1、客戶端

import socket,hashlib,os,json,sys,timeclass Ftpclient(object): def __init__(self): self.client = socket.socket() def connect(self,ip,port): self.client.connect((ip, port)) def help(self): msg=’’’ ls pwd cd ..get filenameput filename’’’ print(msg) def interactive(self): ''' 客戶端入口 :return: ''' while True: verify = self.authenticate() #服務器端認證 if verify:while True: cmd = input(’輸入命令 >>’).strip() if len(cmd) == 0:continue cmd_str = cmd.split()[0] if hasattr(self,’cmd_%s’ %cmd_str): func = getattr(self,’cmd_%s’ %cmd_str) func(cmd) else: self.help() def cmd_put(self,*args): ''' 上傳文件 :param args: :return: ''' cmd_solit = args[0].split() start_time = self.alltime() # 開始時間 if len(cmd_solit) > 1: filename = cmd_solit[1] if os.path.isfile(filename):filesize = os.stat(filename).st_sizemsg_dic = { ’filename’:filename, ’size’:filesize, ’overridden’:True, ’action’:cmd_solit[0]}self.client.send( json.dumps(msg_dic).encode(’utf-8’))server_respinse=self.client.recv(1024) #防止粘包,等服務器確認返回print(’文件開始上傳’,server_respinse)client_size = 0f = open(filename,’rb’)for line in f: client_size += self.client.send(line) self.processBar(client_size,filesize) #進度條else: print(’文件傳輸完畢,大小為 %s’%client_size) end_time = self.alltime() # 結束時間 print(’本次上傳花費了%s 秒’%self.alltime(end_time,start_time)) f.close() else:print(filename,’文件不存在’) else: print(’輸入有誤!’) def cmd_get(self,*args): ''' 下載文件 :param args: :return: ''' cmd_solit = args[0].split() start_time = self.alltime() # 開始時間 filename = cmd_solit[1] if len(cmd_solit) > 1: msg_dic = {’filename’: filename,’size’: ’’,’overridden’: True,’action’: cmd_solit[0],’file_exist’:’’ } self.client.send(json.dumps(msg_dic).encode(’utf-8’)) self.data = self.client.recv(1024).strip() cmd_dic = json.loads(self.data.decode(’utf-8’)) print(cmd_dic) if cmd_dic[’file_exist’]:if os.path.isfile(filename): f = open(filename + ’.new’, ’wb’)else: f = open(filename, ’wb’)self.client.send(b’200 ok’) #防止粘包,等服務器確認返回client_size = 0filesize = cmd_dic[’size’]m = hashlib.md5()while client_size < filesize: data=self.client.recv(1024) f.write(data) client_size +=len(data) m.update(data) self.processBar(client_size, filesize)else: print(’下載完畢’) end_time = self.alltime() # 結束時間 print(’本次下載花費了%s 秒’ % self.alltime(end_time, start_time)) f.close() new_file_md5 = m.hexdigest() server_file_md5 = self.client.recv(1024) print(’MD5’, server_file_md5,new_file_md5) else:print(’下載的 %s文件不存在’%filename) else: print(’輸入有誤!’) def cmd_dir(self,*arge): cmd_solit = arge[0].split() if len(cmd_solit) > 0: msg_dic = {’action’: cmd_solit[0] } self.client.send(json.dumps(msg_dic).encode()) cmd_dir = self.client.recv(1024) print(cmd_dir.decode()) else: print(’輸入錯誤!’) def alltime(self,*args): ''' 計算上傳、下載時間 :param args: :return: ''' if args: return round(args[0] - args[1]) else: return time.time() def processBar(self,num, total): ''' 進度條 :param num:文件總大小 :param total: 已存入文件大小 :return: ''' rate = num / total rate_num = int(rate * 100) if rate_num == 100: r = ’r%s>%d%%n’ % (’=’ * int(rate_num /3), rate_num,) else: r = ’r%s>%d%%’ % (’=’ * int(rate_num /3), rate_num,) sys.stdout.write(r) sys.stdout.flush def authenticate(self): ''' 用戶加密認證 :return: ''' username = input(’輸入用戶名:>>’) password = input(’輸入密碼:>>’) m = hashlib.md5() if len(username) > 0 and len(password) >0: username = ’’.join(username.split()) password = ’’.join(password.split()) m.update(username.encode(’utf-8’)) m.update(password.encode(’utf-8’)) m = {’username’:username,’password’:password,’md5’:m.hexdigest() } self.client.send(json.dumps(m).encode(’utf-8’)) server_user_md5 = self.client.recv(1024).strip() print(server_user_md5.decode()) if server_user_md5.decode() == ’success’:print(’登錄成功!’)return ’ok’ else:print(’用戶名密碼錯誤!’) else: print(’請輸入用戶名密碼’)f = Ftpclient()f.connect(’localhost’,9999)f.interactive()

2、服務器端

import socketserver,json,os,hashlib,sys,paramikoimport settingsclass Mysocketserver(socketserver.BaseRequestHandler): def put(self,*args): ’’’ 接受客戶端上傳文件 :return: ’’’ cmd_dic = args[0] filename = cmd_dic[’filename’] #獲取文件名 filesize= cmd_dic[’size’] #獲取文件大小(字節) if os.path.isfile(filename): #判斷文件是否存在 f = open(filename + ’.new’,’wb’) else: f = open(filename, ’wb’) self.request.send(b’200 ok’) #防止粘包 print(’%s 文件開始上傳’ % self.client_address[0]) received_size = 0 while received_size < filesize: data = self.request.recv(1024) f.write(data) received_size += len(data) else: print(’文件傳輸完畢’,filename) def get(self, *args): ’’’ 客戶端下載文件 :return: ’’’ msg_dic = { ’filename’: ’’, ’size’: ’’, ’overridden’: True, ’action’: ’’, ’file_exist’: ’’ } cmd_solit = args[0] filename = cmd_solit[’filename’] file_exist = os.path.isfile(filename) msg_dic[’file_exist’] = file_exist print(file_exist) if file_exist: filesize = os.stat(filename).st_size msg_dic[’filename’] = filename msg_dic[’size’] = filesize msg_dic[’action’] = cmd_solit[’action’] self.request.send(json.dumps(msg_dic).encode(’utf-8’)) server_respang = self.request.recv(1024) #防止粘包 print(’開始傳輸’,server_respang) f = open(filename,’rb’) m = hashlib.md5() for lien in f:m.update(lien)self.request.send(lien) else:print(’傳輸完成’)f.close()self.request.send(m.hexdigest().encode()) else: print(’文件不存在’) self.request.send(json.dumps(msg_dic).encode(’utf-8’)) def client_authentication(self): ''' 客戶端認證 :return: ''' self.client_user= self.request.recv(1024).strip() client_xinxi = json.loads(self.client_user.decode(’utf-8’)) try: with open(settings.school_db_file + client_xinxi[’username’],’rb’) as f:data = json.load(f)if data[’md5’] == client_xinxi[’md5’]: #判斷用戶輸入是否和服務器端MD5是否一致 print(’驗證成功!’) self.request.send(’success’.encode()) return ’success’else: self.request.send(’error’.encode()) except Exception as e: print(’沒有此用戶’,e) self.request.send(’error’.encode()) def dir(self,*args): ''' 查看目錄 :param args: :return: ''' cmd_split = args[0] dd=cmd_split[’action’] result_os = os.popen(dd).read() self.request.send(result_os.encode()) def handle(self): ''' 服務器端入口 :return: ''' while True: try:success = self.client_authentication()if success: self.data=self.request.recv(1024).strip() cmd_dic = json.loads(self.data.decode(’utf-8’)) action = cmd_dic[’action’] if hasattr(self,action): func = getattr(self,action) func(cmd_dic) except ConnectionResetError as e:print(’連接斷開’,self.client_address[0])breakif __name__ == ’__main__’: HOST,PORT=’localhost’,9999 server=socketserver.ThreadingTCPServer((HOST,PORT),Mysocketserver) server.serve_forever()

settings.py 文件

import osBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))DB_FILE = os.path.join(BASE_DIR, 'data')school_db_file = os.path.join(DB_FILE)print(school_db_file)

data里兩個做測試的文件,

alex 文件內容: {'username': 'alex', 'password': '123456', 'md5': '94e4ccf5e2749b0bfe0428603738c0f9'}

kml123456文件內容:{'username': 'kml123456', 'password': '123456','md5': 'a791650e70ce08896e3dafbaa7598c26'}

到這里差不多就沒了,

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
在线国产精品一区| 欧美精品在线一区二区| 国产成人av福利| 一本色道久久综合亚洲精品高清| 欧美精品二区三区四区免费看视频| 99精品视频在线观看| 欧美日韩视频不卡| 久久久亚洲国产美女国产盗摄| 丁香桃色午夜亚洲一区二区三区| 制服.丝袜.亚洲.另类.中文| 亚洲国产综合视频在线观看| 91福利在线导航| 欧美jjzz| 色婷婷久久综合| 久久综合色天天久久综合图片| 成人免费视频一区二区| 麻豆精品蜜桃视频网站| 欧美日本韩国在线| 国产精品免费免费| 国产一区二区三区在线观看免费视频 | 国产精品系列在线播放| 久久久久久精| 亚洲狠狠爱一区二区三区| 亚洲少妇诱惑| 一区二区免费看| 蜜桃久久av| 美女性感视频久久| 欧美精品久久久久久久久老牛影院| 亚洲精品免费视频| 国产日本精品| 一区二区三区四区亚洲| 久久国产一区| 免费成人在线观看视频| 在线视频综合导航| 国内成人自拍视频| 日韩一区二区在线播放| av一区二区不卡| 久久久不卡网国产精品一区| 欧美福利专区| 亚洲精品一卡二卡| 久久国产日韩| 国产综合成人久久大片91| 日韩一区二区三区在线视频| 91影院在线免费观看| 中文字幕一区在线| 久久国产精品一区二区三区| 蓝色福利精品导航| 欧美mv日韩mv| 亚洲无玛一区| 亚洲国产精品自拍| 欧美视频一区在线观看| 粉嫩aⅴ一区二区三区四区| 国产清纯白嫩初高生在线观看91| 国产一区二区免费视频| 欧美精选一区二区| 99久久亚洲一区二区三区青草| 欧美久久久久免费| 国产成人精品一区二区三区四区| 91黄视频在线| 激情国产一区二区| 久久婷婷色综合| 亚洲欧洲精品一区二区| 婷婷国产v国产偷v亚洲高清| 欧美区在线观看| 色综合婷婷久久| 一区二区三区91| 欧美视频三区在线播放| 成人激情开心网| 国产精品久久久久婷婷二区次| 91亚洲午夜精品久久久久久| 国产精品国产馆在线真实露脸| 91片在线免费观看| 亚洲素人一区二区| 在线亚洲人成电影网站色www| 五月天精品一区二区三区| 欧美日本视频在线| 国产综合自拍| 美女视频一区二区| 日本一区二区三区在线观看| 在线亚洲精品| 狠狠色丁香久久婷婷综合丁香| 在线不卡a资源高清| zzijzzij亚洲日本少妇熟睡| 亚洲男同性视频| 欧美日本一道本在线视频| 韩日视频一区| 麻豆成人久久精品二区三区红| 在线观看网站黄不卡| 国产成人精品1024| 亚洲美女免费视频| 欧美系列在线观看| 欧美涩涩视频| 激情成人午夜视频| 亚洲欧美日韩一区二区| 欧美夫妻性生活| 亚洲国产精品一区| 国产精品一区二区不卡| 亚洲欧美自拍偷拍色图| 欧美吞精做爰啪啪高潮| 伊人久久综合| 国产精品1区2区| 亚洲一区二区在线播放相泽| 日韩精品一区二区三区在线播放| 欧美一区三区二区在线观看| 午夜视频在线观看一区二区 | 国产午夜精品一区二区| 在线亚洲欧美| 91在线国产福利| 蜜臀久久99精品久久久久宅男| 在线播放中文一区| 国产欧美日韩在线播放| 国产美女在线观看一区| 亚洲一区二区三区精品在线| 欧美精品一区二区三区四区| 日本精品一区二区三区高清| 亚洲精品123区| av亚洲产国偷v产偷v自拍| 美女视频黄免费的久久 | 亚洲男帅同性gay1069| 欧美福利一区二区| 久久免费高清| 亚洲精品影院| 91色.com| 国产成人免费视| 麻豆免费精品视频| 亚洲成人免费看| 国产精品免费久久久久| 欧美一区二区播放| 色婷婷激情一区二区三区| 韩国精品一区二区三区| 丁香六月久久综合狠狠色| 日本午夜精品一区二区三区电影| 欧美一区二区视频在线观看2020 | 激情婷婷久久| 丁香亚洲综合激情啪啪综合| 视频一区免费在线观看| 日韩一区在线播放| 精品国产自在久精品国产| 欧美日韩精品一区二区三区 | 久久久人人人| 尤物在线精品| 91麻豆国产精品久久| 久草热8精品视频在线观看| 亚洲成人www| 亚洲色图.com| 国产情人综合久久777777| 日韩欧美视频在线| 欧美精品粉嫩高潮一区二区| 久久性色av| 免费精品视频| 国产精品视频福利| 亚洲黄色av| 亚洲调教视频在线观看| 欧美黄色一区二区| 成人av电影在线播放| 国产传媒欧美日韩成人| 国产综合色产在线精品| 久久精品二区亚洲w码| 日本午夜精品视频在线观看| 亚洲成人自拍偷拍| 一区二区三区在线播放| 亚洲美女视频在线| 专区另类欧美日韩| 国产精品国产自产拍在线| 中文字幕乱码亚洲精品一区 | 黄色国产精品一区二区三区| av在线不卡网| 99re在线精品| 欧美一区激情| 午夜精品免费| 欧美黄污视频| 欧美人与禽性xxxxx杂性| 国产精品hd| 国内精品亚洲| 亚洲国产精品日韩| 一本久道久久久| 一区二区黄色| 亚洲欧美清纯在线制服| 老鸭窝亚洲一区二区三区| 久久电影一区| 久久婷婷一区| 欧美日韩三级在线| 91精品国产日韩91久久久久久| 亚洲黑丝一区二区| 在线 亚洲欧美在线综合一区| 高清在线不卡av| 国产福利精品一区| 国产91丝袜在线播放0| 国产91色综合久久免费分享| 国产麻豆精品在线观看| 国产精品77777| 白白色 亚洲乱淫| 93久久精品日日躁夜夜躁欧美| 韩国精品免费视频| 蜜乳av一区二区三区| 国产制服丝袜一区| 成人av在线资源网| 欧美精品麻豆| 亚洲深夜影院| 色哟哟国产精品|