如何在Python中使用套筒模块传输ftp文件

  介绍

本篇文章给大家分享的是有关如何在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文件,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

如何在Python中使用套筒模块传输ftp文件