日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

python實現(xiàn)ftp文件傳輸功能

瀏覽:179日期:2022-08-01 17:56:24

本文實例為大家分享了python實現(xiàn)ftp文件傳輸?shù)木唧w代碼,供大家參考,具體內(nèi)容如下

主要步驟可以分為以下幾步:

1.讀取文件名2.檢測文件是否存在3.打開文件4.檢測文件大小5.發(fā)送文件大小和 md5值給客戶端6.等客戶端確認(rèn)7.開始邊讀邊發(fā)數(shù)據(jù)

服務(wù)器端代碼:

import socket,os,timeimport hashlib server =socket.socket()server.bind((’0.0.0.0’,6666))server.listen()print('等待....')while True: conn,addr = server.accept() print('new conn:',conn) while True: data = conn.recv(1024) if not data: print('client is disconnection') break cmd,filename = data.decode().split() #記錄指令和文件名 print(filename) #判斷當(dāng)前目錄是否存在該文件,而且必須是文件,而不是目錄 if os.path.isfile(filename): f = open(filename,’rb’) #m = hashlib.md5() # 創(chuàng)建md5 file_size = os.stat(filename).st_size #stat() 可以返回文件的大小值 conn.send((str(file_size)).encode()) # 發(fā)送文件大小 conn.recv(1024) #等待返回信息 for line in f: # m.updata(line) conn.send(line) #print('file md5',m.hexdigest()) #打印md5值 f.close()

客戶端代碼:

# Author: zjtimport socket client = socket.socket() client.connect(('0.0.0.0',6666)) while True: cmd = input('>>>:').strip() if len(cmd)==0 :continue if cmd.startswith('get'): client.send(cmd.encode()) server_response = client.recv(1024) print('server response: ',server_response) client.send(b'ready to recv file') # 開始接收文件 file_total_size = int(server_response.decode()) received_size = 0 # 記錄接收文件的大小 filename = cmd.split()[1] # 因為兩個目錄一致,接收的文件名不能與原文件相同 f = open(filename+'.new','wb') while received_size < file_total_size: data = client.recv(1024) received_size += len(data) f.write(data) print('total:',file_total_size,' present: ',received_size) else: print('file has received done!') f.close() client.close()

用80M的文件傳輸測試,效果如下:

python實現(xiàn)ftp文件傳輸功能

程序升級:

前面的代碼還沒添加md5進(jìn)行驗證,現(xiàn)在對代碼進(jìn)行升級

服務(wù)器端代碼:

import socket,os,timeimport hashlib server =socket.socket()server.bind((’0.0.0.0’,8888))server.listen()print('等待....')while True: conn,addr = server.accept() print('new conn:',conn) while True: data = conn.recv(1024) if not data: print('client is disconnection') break cmd,filename = data.decode().split() #記錄指令和文件名 print(filename) #判斷當(dāng)前目錄是否存在該文件,而且必須是文件,而不是目錄 if os.path.isfile(filename): f = open(filename,’rb’) m = hashlib.md5() # 創(chuàng)建md5 file_size = os.stat(filename).st_size #stat() 可以返回文件的大小值 conn.send((str(file_size)).encode()) # 發(fā)送文件大小 conn.recv(1024) #等待返回信息 for line in f: m.update(line) conn.send(line) print('file md5',m.hexdigest()) #打印md5值 f.close() conn.send(m.hexdigest().encode()) # 發(fā)送md5 print('我真的已經(jīng)發(fā)過去了',m.hexdigest().encode()) print('send done') server.close()

客戶端代碼:

import socketimport hashlibclient = socket.socket()client.connect(('0.0.0.0',8888))while True: cmd = input('>>>:').strip() if len(cmd)==0 :continue if cmd.startswith('get'): client.send(cmd.encode()) server_response = client.recv(1024) print('server response: ',server_response) client.send(b'ready to recv file') # 開始接收文件 file_total_size = int(server_response.decode()) received_size = 0 # 記錄接收文件的大小 filename = cmd.split()[1] # 因為兩個目錄一致,接收的文件名不能與原文件相同 f = open(filename+'.new','wb') m = hashlib.md5() while received_size < file_total_size: data = client.recv(1024) received_size += len(data) m.update(data) f.write(data) #print('total:',file_total_size,' present: ',received_size) else: new_file_md5 = m.hexdigest() print('client file md5:',new_file_md5) print('file has received done!') print('total:',file_total_size,' present: ',received_size) f.close() sever_file_md5 = client.recv(1024) print('client file md5:',new_file_md5) print('server file md5:',sever_file_md5)client.close()

兩個程序在linux 環(huán)境下運行,結(jié)果如下:

python實現(xiàn)ftp文件傳輸功能

可以看到傳輸后文件大小變大了一點點,而且md5前后值也不同,說明文件傳輸發(fā)生了改變。

現(xiàn)在講程序在windows環(huán)境下運行,結(jié)果如下:

python實現(xiàn)ftp文件傳輸功能

此時可以看到windows上沒有問題,文件大小相同,且md5值也一致。

原因分析:

之所以會發(fā)生這種情況,是因為在linux上運行時,最后一次傳輸文件與發(fā)送md5值的時候,發(fā)生可粘包,導(dǎo)致最后一次接收文件的時候,連同md5的數(shù)據(jù)一并發(fā)送了。而客戶端也當(dāng)作一條接收信息,全部接收了。所以客戶端出現(xiàn)沒有收到來自服務(wù)器端的md5值,多出來的那一點點,就是md5值的大小。

解決方法:

在接收文件的時候,判斷當(dāng)前剩余多少文件需要接收,如果大于1024,就接收1024大小的文件,否則就只接收剩下全部的文件,防止最后一次接收多余的數(shù)據(jù)。

只需要對客戶端代碼進(jìn)行修改,修改后代碼如下:

import socketimport hashlibclient = socket.socket()client.connect(('0.0.0.0',8888))while True: cmd = input('>>>:').strip() if len(cmd)==0 :continue if cmd.startswith('get'): client.send(cmd.encode()) server_response = client.recv(1024) print('server response: ',server_response) client.send(b'ready to recv file') # 開始接收文件 file_total_size = int(server_response.decode()) received_size = 0 # 記錄接收文件的大小 filename = cmd.split()[1] f = open(filename+'.new','wb') m = hashlib.md5() while received_size < file_total_size: #添加一次判斷,使最后一次剩多少就接收多少,避免發(fā)生粘包 if file_total_size - received_size > 1024: size = 1024 else: # 最后一次,剩多少收多少 size = file_total_size - received_size data = client.recv(size) received_size += len(data) m.update(data) f.write(data) else: new_file_md5 = m.hexdigest() print('client file md5:',new_file_md5) print('file has received done!') print('total:',file_total_size,' present: ',received_size) print('下一句關(guān)閉文件') f.close() print('開始接收md5 ') sever_file_md5 = client.recv(1024) print('client file md5:',new_file_md5) print('server file md5:',sever_file_md5)client.close()

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
中文字幕亚洲影视| 久久久成人网| 91久久午夜| 亚洲精品小说| 综合国产精品| 毛片不卡一区二区| 好看不卡的中文字幕| 久久久久亚洲| 免费日韩av片| 亚州精品视频| 精品一区二区三区在线观看视频 | 不卡中文一二三区| 999在线观看精品免费不卡网站| 亚洲欧美日韩视频二区| 亚洲免费一区三区| 福利精品在线| 91九色精品| 国产日产高清欧美一区二区三区| 国产精选一区| 亚洲一级特黄| 免费视频亚洲| 国产精品777777在线播放 | 国产日韩欧美高清免费| 日韩av福利| 日日夜夜免费精品视频| 91亚洲国产成人久久精品| 免费精品视频| 成人午夜毛片| 免费人成在线不卡| 日韩亚洲一区在线| 欧美精品国产| 亚洲精品1区2区| 国产一区2区| 911精品国产| 日韩午夜在线| 视频一区在线播放| 精品视频91| 在线精品视频在线观看高清| 日韩高清电影免费| 国产精品99免费看| 国产精品.xx视频.xxtv| 亚洲在线一区| 99精品美女| 麻豆视频久久| 日韩av影院| 中文在线不卡| 日韩精品欧美| 久久久久久色| 婷婷亚洲综合| 日韩欧美字幕| 国产乱码精品一区二区亚洲| 蜜臀av免费一区二区三区| 群体交乱之放荡娇妻一区二区| 国产尤物精品| 精品丝袜在线| 国产一区二区三区四区二区| 国产另类在线| 国产精品一国产精品k频道56| 蜜桃91丨九色丨蝌蚪91桃色| 欧美日韩日本国产亚洲在线| 久久精品欧美一区| 欧美性感美女一区二区| а√天堂8资源在线| 久久xxx视频| 在线天堂资源www在线污| 精品久久美女| 国产精品二区影院| 国内在线观看一区二区三区| 国产一区二区三区久久| 日韩伦理在线一区| 亚洲二区精品| 99国产精品99久久久久久粉嫩| 亚洲www免费| 国产一区二区三区四区| 91欧美在线| 国产成人免费av一区二区午夜| 国产精品亚洲欧美日韩一区在线| 国产精品视频一区二区三区综合| 日本午夜精品久久久久| 国产精品一区高清| 成人在线丰满少妇av| 国产女人18毛片水真多18精品| 亚洲精品伊人| 麻豆精品视频在线观看免费| 精品免费av| 色婷婷精品视频| 亚洲欧洲午夜| 日韩欧美高清一区二区三区| 欧美日韩亚洲一区在线观看| 国产高清亚洲| 亚洲精品1区| 国产私拍福利精品视频二区| 高清久久精品| 一区二区三区网站| 久久久久九九精品影院| 亚洲婷婷在线| 在线精品亚洲| 国产精品欧美三级在线观看| 久久久久一区| 日日夜夜免费精品视频| 欧美日韩国产观看视频| av亚洲在线观看| 国产精品视频一区二区三区| 久久久久久久久99精品大| 爽好多水快深点欧美视频| 鲁大师精品99久久久| 一区二区三区四区在线看| 午夜久久av| 久久蜜桃av| 狂野欧美性猛交xxxx| 9国产精品视频| 美女免费视频一区| 综合干狼人综合首页| 日韩大片在线| 老色鬼久久亚洲一区二区| 欧美日韩精品免费观看视完整| 99久久久久久中文字幕一区| 少妇高潮一区二区三区99| 成人日韩av| 久久精品999| 激情五月综合网| 亚洲欧美成人综合| 91大神在线观看线路一区| 激情久久一区二区| 欧美日韩在线观看视频小说| 国产精品igao视频网网址不卡日韩 | 国产精品国产一区| 欧美另类中文字幕| 7777精品| 国产精品亚洲四区在线观看| 国产欧美日韩一区二区三区四区| 欧美一区激情| 久久av日韩| 蜜臀久久精品| 国产精品人人爽人人做我的可爱| 免费在线观看精品| 久久的色偷偷| 国产99久久| 国精品一区二区| 亚洲精品一二| 精品视频97| 久久不射网站| 国产精品v日韩精品v欧美精品网站| 国产精品777777在线播放| 久久久777| 日韩在线观看一区二区三区| 99国产精品久久久久久久| 一区二区电影在线观看| 国内一区二区三区| 蜜臀久久99精品久久久画质超高清 | 精品欧美日韩精品| 欧美日韩一二三四| 日本色综合中文字幕| 日韩不卡视频在线观看| 日韩精品一二三四| 日韩动漫一区| 久久国产精品99国产| 亚洲综合电影| 免费一级欧美片在线观看网站| 六月天综合网| 麻豆精品新av中文字幕| 午夜在线观看免费一区| 手机精品视频在线观看| 中文字幕人成乱码在线观看| 国产探花一区二区| 欧美专区在线| 啪啪国产精品| 久久久久久自在自线| 精品一区二区三区视频在线播放| 日韩亚洲精品在线观看| 美美哒免费高清在线观看视频一区二区| 久久精品动漫| 日韩综合精品| 欧美xxxx中国| 精品久久网站| 久久婷婷国产| 久久中文字幕一区二区| 国产乱子精品一区二区在线观看 | 欧美一级全黄| 91亚洲国产高清| 欧美日韩中出| 国产精品毛片aⅴ一区二区三区| 亚洲一区区二区| 在线看片一区| 国产亚洲电影| 午夜精品亚洲| 91p九色成人| 国产私拍福利精品视频二区| 精品国产亚洲一区二区三区在线 | 美女精品一区二区| 麻豆国产欧美一区二区三区| 欧美伊人久久| 国产色噜噜噜91在线精品| 在线看片一区| 亚洲精品韩国| 麻豆精品av| 欧美亚洲激情| 免费看日韩精品| 精品视频在线一区二区在线| 国内一区二区三区|