python怎么发送文件,python文件上传

  python怎么发送文件,python文件上传

  python中传输文件的方法:1。把头转换成字符串[json.dumps],然后把字符串的长度打包;2.发送头长度和头内容,然后播放真实内容;3.解压缩头长度以获得头信息的大小,然后接收头信息并将其反序列化。

  思维:

  #先把头转换成字符串(json.dumps),然后把字符串的长度打包。

  #发送头长度,发送头内容,最后放真实内容。

  #头内容包括文件名、文件信息和头。

  #接收时,首先接收长度为4字节的报头,

  #解压缩标题长度以获得标题信息的大小。收到头信息后,反序列化它(json.loads)

  #终于收到真正的文件

  服务端

  #!/usr/bin/envpython

  #-*-编码:utf-8-*-

  #@File:文件传输-server.py

  # @ software : pycharmfromsocketimport * importstructimportjsonimportosttcp _ server=socket(AF _ INET,SOCK _ STREAM)IP _ port=(( 127 . 0 . 0 . 1 ,8080))buffsize=1024

  #端口的重复使用

  TCP _ server . setsockopt(sol _ socket,so _ reuseport,1)TCP _ server . bind(IP _ port)TCP _ server . listen(5)print(还没有人链接)

  whileTrue:

  链接循环

  conn,addr=tcp_server.accept()

  打印(“链接者信息3360”,地址)

  whileTrue:

  ifnotconn:

  打印(“客户端链接断开”)

  breakn

  bsp;

  '''通信循环'''

  filemesg=input('请输入要传送的文件名加后缀>>>').strip()

  filesize_bytes=os.path.getsize(filemesg)#得到文件的大小,字节

  filename='new'+filemesg

  dirc={

  'filename':filename,

  'filesize_bytes':filesize_bytes,

  }

  head_info=json.dumps(dirc)#将字典转换成字符串

  head_info_len=struct.pack('i',len(head_info))

  #将字符串的长度打包

  #先将报头转换成字符串(json.dumps),再将字符串的长度打包

  #发送报头长度,发送报头内容,最后放真是内容

  #报头内容包括文件名,文件信息,报头

  #接收时:先接收4个字节的报头长度,

  #将报头长度解压,得到头部信息的大小,在接收头部信息,反序列化(json.loads)

  #最后接收真实文件

  conn.send(head_info_len)#发送head_info的长度

  conn.send(head_info.encode('utf-8'))

  #发送真是信息

  withopen(filemesg,'rb')asf:

  data=f.read()

  conn.sendall(data)

  print('发送成功')客户端

  

#!/usr/bin/envpython

  #-*-coding:utf-8-*-

  #@File:文件传输_客户端.py

  #@Software:PyCharmfromsocketimport*

  importstruct

  importjson

  importos

  importsys

  importtime

  from进度条importprocess_bar

  tcp_client=socket(AF_INET,SOCK_STREAM)

  ip_port=(('127.0.0.1',8080))

  buffsize=1024

  tcp_client.connect_ex(ip_port)

  print('等待链接服务端')

  whileTrue:

  

  head_struct=tcp_client.recv(4)#接收报头的长度,

  ifhead_struct:

  print('已连接服务端,等待接收数据')

  

  head_len=struct.unpack('i',head_struct)[0]#解析出报头的字符串大小

  data=tcp_client.recv(head_len)#接收长度为head_len的报头内容的信息(包含文件大小,文件名的内容)

  head_dir=json.loads(data.decode('utf-8'))

  

  filesize_b=head_dir['filesize_bytes']

  

  filename=head_dir['filename']

  #接受真的文件内容

  

  recv_len=0

  

  recv_mesg=b''

  

  old=time.time()

  

  f=open(filename,'wb')

  whilerecv_len<filesize_b:

  

  percent=recv_len/filesize_b

  

  process_bar(percent)

  iffilesize_b-recv_len>buffsize:

  

  recv_mesg=tcp_client.recv(buffsize)

  

  f.write(recv_mesg)

  

  recv_len+=len(recv_mesg)

  else:

  

  recv_mesg=tcp_client.recv(filesize_b-recv_len)

  

  recv_len+=len(recv_mesg)

  

  f.write(recv_mesg)

  print(recv_len,filesize_b)

  

  now=time.time()

  

  stamp=int(now-old)

  print('总共用时%ds'%stamp)

  

  f.close()

进度条

  

#!/usr/bin/envpython

  #-*-coding:utf-8-*-

  #@File:进度条.py

  #@Software:PyCharm

  importsys

  importtime

  defprocess_bar(precent,width=50):use_num=int(precent*width)space_num=int(width-use_num)precent=precent*100

  #第一个和最后一个一样梯形显示,中间两个正确,但是在python2中报错#print('[%s%s]%d%%'%(use_num*'#',space_num*'',precent))#print('[%s%s]%d%%'%(use_num*'#',space_num*'',precent),end='\r')print('[%s%s]%d%%'%(use_num*'#',space_num*'',precent),file=sys.stdout,flush=True,end='\r')

  #print('[%s%s]%d%%'%(use_num*'#',space_num*'',precent),file=sys.stdout,flush=True)

  #foriinrange(21):

  #precent=i/20

  #process_bar(precent)

  #time.sleep(0.2)

  

推荐课程:Python进阶视频教程

  

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • python文件路径操作方法总结怎么写,python文件路径操作方法总结表,python文件路径操作方法总结
  • python文件路径操作方法总结怎么写,python文件路径操作方法总结图
  • ,,PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
  • python文件加密存储,python通过文件读写,复制图片
  • python文件打开的默认方式是只读,python以只读方式打开文本文件的参数
  • python文件读写,python将数据写入文件和从文件读取
  • 怎么把python文件变成可执行exe,python将py文件编译成exe文件
  • 打开python文件的两种方式,python文件是怎么打开
  • python文件操作write,python文件write函数的用法
  • linux如何编译python文件,linux上python编译器
  • python打不开文件怎么回事,做好的python文件直接打开怎么不能用
  • python中绝对路径,python文件相对路径怎么写
  • python对文件的操作方法有哪些,python文件的基本操作
  • python关于文件的题目,python文件概述
  • python文件可以直接运行吗,python直接运行
  • 留言与评论(共有 条评论)
       
    验证码: