python如何实现ftp文件传输功能

  介绍

这篇文章将为大家详细讲解有关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的文件传输测试,效果如下:

 python如何实现ftp文件传输功能

<强>程序升级:

前面的代码还没添加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文件传输功能