介绍
这篇文章将为大家详细讲解有关python如何实现ftp文件传输功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
本文实例为大家分享了python实现ftp文件传输的具体代码,具体内容如下
主要步骤可以分为以下几步:
1。读取文件名
2。检测文件是否存在
3。打开文件
4。检测文件大小
5。发送文件大小和md5值给客户端
6。等客户端确认
7。开始边读边发数据
服务器端代码:
import 插座,操作系统,时间 import hashlib , server =socket.socket () server.bind ((& # 39; 0.0.0.0 # 39;, 6666)) server.listen () print(“等待....“) while 真正的: ,康涅狄格州,addr =, server.accept () 康涅狄格州,print (“new :“,康涅狄格州) ,while 真正的:=,,data  conn.recv (1024) ,if not 数据: ,打印(“client is disconnection") ,打破 ,cmd, filename =, data.decode () .split(), #记录指令和文件名 ,打印(文件名) ,#判断当前目录是否存在该文件,而且必须是文件,而不是目录 ,if os.path.isfile(文件名): ,f =, open (filename, & # 39; rb # 39;) ,# m =, hashlib.md5(), #,创建md5=,,file_size  os.stat(文件名).st_size # stat(),可以返回文件的大小值 ,conn.send (str (file_size)) .encode()), #,发送文件大小 ,conn.recv(1024), #等待返回信息 ,for line f:拷贝 ,# m.updata(线), ,conn.send(线) ,#打印(“file  md5", m.hexdigest()), #打印md5值 之前,f.close () >客户端代码:
#,作者:zjt import 套接字 , 时间=client socket.socket () , client.connect ((“0.0.0.0", 6666)) , , while 真正的:=,cmd 输入(“祝辞祝辞祝辞:“).strip () , ,if len (cmd)==0,:继续 , ,if cmd.startswith (“get"): ,client.send (cmd.encode ())=,,server_response  client.recv (1024) ,打印(“server 回应:,“,server_response) ,client.send (b" ready 用recv file") , ,#开始接收文件 ,file_total_size =, int (server_response.decode ()) ,received_size =, 0, #,记录接收文件的大?,,filename  cmd.split () [1] ,#因为两个目录一致,接收的文件名不能与原文件相同 open (filename, f =, +“.new",“wb") ,while received_size & lt; file_total_size:=,,data  client.recv (1024) +=,received_size , len(数据) ,f.write(数据) ,打印(“总:“file_total_size,,,:,“, received_size) ,其他的: ,打印(“file  has received 完成了!“) ,f.close () , client.close ()用80的文件传输测试,效果如下:
<强>程序升级:强>
前面的代码还没添加md5进行验证,现在对代码进行升级
<强>服务器端代码:强>
import 插座,操作系统,时间 import hashlib , server =socket.socket () server.bind ((& # 39; 0.0.0.0 # 39;, 8888)) server.listen () print(“等待....“) while 真正的: ,康涅狄格州,addr =, server.accept () 康涅狄格州,print (“new :“,康涅狄格州) ,while 真正的:=,,data  conn.recv (1024) ,if not 数据: ,打印(“client is disconnection") ,打破 ,cmd, filename =, data.decode () .split(), #记录指令和文件名 ,打印(文件名) ,#判断当前目录是否存在该文件,而且必须是文件,而不是目录 ,if os.path.isfile(文件名): ,f =, open (filename, & # 39; rb # 39;)=,,m  hashlib.md5(), #,创建md5=,,file_size  os.stat(文件名).st_size # stat(),可以返回文件的大小值 ,conn.send (str (file_size)) .encode()), #,发送文件大小 ,conn.recv(1024), #等待返回信息 ,for line f:拷贝 ,m.update(线) ,conn.send(线) ,打印(“file  md5", m.hexdigest()), #打印md5值 , ,f.close () ,conn.send (m.hexdigest () .encode()), #,发送md5 , ,打印(“我真的已经发过去了“,m.hexdigest () .encode ()) , ,打印(“send done") , server.close ()python如何实现ftp文件传输功能