电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

python中的socket實現(xiàn)ftp客戶端和服務器收發(fā)文件及md5加密文件

瀏覽:137日期:2022-07-31 14:45:33

客戶端向服務器發(fā)送一個請求,請求內(nèi)容是一個文件名,服務器在查找自己這邊有沒有這個文件,如果有的話就發(fā)送給客戶端

1、客戶端

生成socket對象 建立連接 輸入想要接收的文件 將輸入的文件名發(fā)送給服務器 接收服務器發(fā)回的關于即將要發(fā)送來的文件的大小 發(fā)送一條信息給服務器告訴它準備好接收了 接收文件數(shù)據(jù) 打印全部接收的提示信息

client具體實現(xiàn)的代碼如下:

# Author: Mr.Xue# 2019.10.29# socket_ftp_client.pyimport socketimport hashlibclient = socket.socket() # 生成socket連接對象client.connect((’localhost’, 6961)) # 建立連接while True: cmd = input('>>').strip() # 輸入想要接收的文件 if len(cmd) == 0: continue # 輸入為空,重新再輸 if cmd.startswith(’get’): # 判斷指令是否以get開頭 client.send(cmd.encode('utf-8')) # 發(fā)送 server_response = client.recv(1024) #接收即將發(fā)送來的文件的大小 print('server response:', server_response) # 打印文件的大小 client.send(b’ready to recv file...’) # 發(fā)送消息告訴服務已經(jīng)準備好接收了 file_total_size = int(server_response.decode()) # 記錄文件的總大小 received_size = 0 # 記錄已經(jīng)接收了的文件的大小 filename = cmd.split()[1] # 取出輸入的文件名 f = open(filename + ’.new’, ’wb’) # 新建一個本地文件來存儲接收的數(shù)據(jù) m = hashlib.md5() # md5加密 while received_size < file_total_size: data = client.recv(1024) # 接收數(shù)據(jù),一次最大接收1024bytes received_size += len(data) # 記錄已接收的數(shù)據(jù)大小 m.update(data) # 用md5加密 f.write(data) # 寫入文件 else: new_file_md5 = m.hexdigest() # 16進制顯示加密文件 print('file recv done', received_size, file_total_size) f.close() server_md5 = client.recv(1024) # 接收服務器端以md5加密的這個接收文件的加密文件,拿來和接收之后的加密文件做比較 print('md5', new_file_md5, server_md5)client.close()

client端比較難的一點和上篇一樣,還是如何判斷服務器端要發(fā)送的數(shù)據(jù),客戶端是否完全都接收過來了,實現(xiàn)邏輯在上面代碼中,也可參考前一篇socket(二);在客戶端這一次多了一個新的知識點,用md5來加密接收到的文件,先生成md5實例對象,再調(diào)用update()來加密文件,最后和服務器端的加密文件進行比較,看看是不是一樣的。

2、服務器

生成socket連接對象 綁定要監(jiān)聽端口 監(jiān)聽 等待客戶端的連接 接收客戶端發(fā)來的文件名 查找這個文件是否存在 如果存在,打開文件計算大小,發(fā)送給客戶端 等待客戶端確認 發(fā)送文件具體內(nèi)容給客戶端

server具體實現(xiàn)代碼如下:

# Author: Mr.Xue# 2019.10.29# socket_ftp_server.pyimport socket, os, hashlibserver = socket.socket() #生成socket對象server.bind((’localhost’, 6961)) # 綁定ip和端口server.listen() #監(jiān)聽while True: conn, addr = server.accept() # 等待客戶端連接 while True: print('等待接收文件名...') data = conn.recv(1024) # 接收客戶端發(fā)來的信息 if not data: #判斷客戶端是否斷連 print(’lost a link...’) break cmd, filename = data.decode().split() # 分割接收到的消息,提取出文件名 if os.path.isfile(filename): # 判斷文件是否存在 f = open(filename, ’rb’) # 打開文件 m = hashlib.md5() # md5加密對象 file_size = os.stat(filename).st_size # 計算文件大小 conn.send(str(file_size).encode('utf-8')) # send file size conn.recv(1024) # wait the ack 預防粘包 for line in f: m.update(line) # 加密 conn.send(line) # 發(fā)送 print('file md5:', m.hexdigest()) # 以16進制打印加密后的文件 f.close() # 關閉文件 conn.send(m.hexdigest().encode('utf-8')) # 以16進制發(fā)送加密后的文件 print(’send done’)socket.close()

服務器的具體實現(xiàn)邏輯和前一篇大體上沒什么區(qū)別,主要處理細節(jié)誒變成了查找文件處理文件和加密文件

3、測試效果

啟動服務器

xue@xue-MacBookAir:~/python_learn$ python3 socket_ftp_server.py

啟動客戶端

client

xue@xue-MacBookAir:~/python_learn$ python3 socket_ftp_client.py >>

server

xue@xue-MacBookAir:~/python_learn$ python3 socket_ftp_server.py 等待接收文件名...

客戶端發(fā)送想要接收的文件名

client

xue@xue-MacBookAir:~/python_learn$ python3 socket_ftp_client.py >>get a.txtserver response: b’90’file recv done 90 90md5 2232897a127542c1d0715e66e7ca57cc b’2232897a127542c1d0715e66e7ca57cc’>>

server

xue@xue-MacBookAir:~/python_learn$ python3 socket_ftp_server.py等待接收文件名...file md5: 2232897a127542c1d0715e66e7ca57ccsend done等待接收文件名...

上面的服務器端在發(fā)送完數(shù)據(jù)之后,接著又發(fā)送了md5的加密文件,可能會發(fā)生粘包的情況,所以上面還存在改進的地方,將預防粘包的代碼加進去就比較完美了。

總結

到此這篇關于python中的socket實現(xiàn)ftp客戶端和服務器收發(fā)文件及md5加密文件的文章就介紹到這了,更多相關python socket 實現(xiàn)ftp 收發(fā)文件md5加密文件內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 不锈钢/气体/液体玻璃转子流量计(防腐,选型,规格)-常州天晟热工仪表有限公司【官网】 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 驾驶人在线_专业学车门户网站| 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 国标白水泥,高标号白水泥,白水泥厂家-淄博华雪建材有限公司 | 立刷【微电签pos机】-嘉联支付立刷运营中心 | 工业用品一站式采购平台|南创工品汇-官网|广州南创 | 铝镁锰板_铝镁锰合金板_铝镁锰板厂家_铝镁锰金属屋面板_安徽建科 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 大型果蔬切片机-水果冬瓜削皮机-洗菜机切菜机-肇庆市凤翔餐饮设备有限公司 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 焊锡丝|焊锡条|无铅锡条|无铅锡丝|无铅焊锡线|低温锡膏-深圳市川崎锡业科技有限公司 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 书信之家_书信标准模板范文大全| 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | 噪声治理公司-噪音治理专业隔音降噪公司 | 合金耐磨锤头_破碎机锤头_郑州市德勤建材有限公司 | 智能电表|预付费ic卡水电表|nb智能无线远传载波电表-福建百悦信息科技有限公司 | 微动开关厂家-东莞市德沃电子科技有限公司 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 蔬菜配送公司|蔬菜配送中心|食材配送|饭堂配送|食堂配送-首宏公司 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 针焰试验仪,灼热丝试验仪,漏电起痕试验仪,水平垂直燃烧试验仪 - 苏州亚诺天下仪器有限公司 | 岛津二手液相色谱仪,岛津10A液相,安捷伦二手液相,安捷伦1100液相-杭州森尼欧科学仪器有限公司 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 定量包装秤,吨袋包装称,伸缩溜管,全自动包装秤,码垛机器人,无锡市邦尧机械工程有限公司 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 活性氧化铝球|氧化铝干燥剂|分子筛干燥剂|氢氧化铝粉-淄博同心材料有限公司 | 橡胶接头_橡胶软接头_可曲挠橡胶接头-巩义市创伟机械制造有限公司 | 衬氟止回阀_衬氟闸阀_衬氟三通球阀_衬四氟阀门_衬氟阀门厂-浙江利尔多阀门有限公司 | 江西自考网-江西自学考试网|