介绍
本篇文章给大家分享的是有关如何在Python中使用套筒模块传输ftp文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强>使用环境:强> python3,窗口环境,需要在头部声明# - * -编码:utf - 8 - *
<强>实现功能:强>
将服务器端所处文件夹的文件,传输到客户端所处的文件夹中。
并且通过md5检测是否出错。
客户端命令的形式是:得到文件名
客户处的新文件是文件格式名
<强> ftp_sever。py 强>
import hashlib import socket 操作系统,时间 时间=server socket.socket () server.bind ((& # 39; localhost # 39;, 9999)) server.listen () while 真正的: 打印才能(“小姐:am waiting for 连接!”) ,,康涅狄格州,addr =, server.accept () 打印才能(康涅狄格州“new :“addr) while 才能正确的: ,,,print(“等待新指令“) ,,,data =, conn.recv (1024) ,,,if not 数据: ,,,,,印刷(“客户端已断开“) ,,,,,休息 ,,,cmd, filename =, data.decode () .split () ,,,印刷(文件名) ,,,if os.path.isfile(文件名):,,#判断是否该文件名为文件 ,,,,,f =,开放(文件名,“rb") ,,,,,m =, hashlib.md5(), #为md5准备 ,,,,,file_size =, os.stat(文件名).st_size #利用os.stat获取文件的大小 ,,,,,conn.send (, str (file_size) .encode (),), # send file 大小 ,,,,,conn.recv(1024), #等待确认,同时可以防止粘包。 ,,,,,for line f:拷贝,#一行一行发送数据,同时更新md5 ,,,,,,m.update(线),,#不断更新md5 ,,,,,,conn.send(线),#不断发送数据。 ,,,,,印刷(“file  md5",, m.hexdigest()), #十六进制的md5 ,,,,,f.close () ,,,,,conn.send (m.hexdigest () .encode ()), # send md5 ,,,印刷(“send done") server.close ()
<强> ftp_client。py 强>
import 插座 import hashlib 时间=client socket.socket () client.connect ((& # 39; localhost # 39;,, 9999)) while 真正的: cmd =,才能输入(“祝辞祝辞:“).strip(), #形式,get 文件名 if 才能len (cmd),==, 0:继续 if 才能cmd.startswith (“get"): ,,,client.send (cmd.encode()), #发送命令,形式,get 文件名 ,,,server_response =, client.recv(1024), #接收文件大小信息 ,,,print (“servr 回应:“,,server_response) ,,,client.send (b" ready 用recv file"), #发送确认信息。 ,,,file_total_size =, int (server_response.decode()), #将文件大小int化。 ,,,received_size =, 0, #初始化接收数据大小,为0 ,,,filename =, cmd.split()[1], #获取文件名 ,,,f =,开放(时间+ filename “.new",,“wb"), #以二进制形式写入 ,,,m =, hashlib.md5(), #为md5准备 ,,,while received_size !=, file_total_size: & # 39;& # 39;& # 39;下面的如果判断是用来完整接收文件,从而避免粘包# 39;公司& # 39;& # 39; if file_total_size 安康;received_size 祝辞,1024,#,要收不止一次,24,size =, 1024, 25,其他:,#,最后一次了,剩多少收多少,26,size =, file_total_size 作用;received_size 27,打印(“last 收到:“,,大小),28,data =, client.recv(大小),#数据只需要是一小个内存,大小为1 k就好,29日,received_size +=, len(数据),30,m.update(数据),#不断更新md5 31, f.write(数据),#不断写入,32,#,打印(file_total_size received_size), 33,其他:,34,new_file_md5 =, m.hexdigest(), #获取十六进制的md5 35,打印(“file  recv done",, received_size,, file_total_size), 36, f.close (), 37, server_file_md5 =, client.recv(1024), #接收md5值,38,打印(“server  file md5:“,, server_file_md5), 39岁,打印(“client  file md5:“,, new_file_md5), 40, 41, client.close ()
以上就是如何在Python中使用套筒模块传输ftp文件,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。