python 通过 socket 发送文件的实例代码


Posted in Python onAugust 14, 2018

目录结构:

python 通过 socket 发送文件的实例代码

client:

#!/usr/bin/env python
# -*-coding:utf-8 -*-
import socket, struct, json
download_dir = r'D:\Python\python_learning\gd\code\part3\02网络编程\文件传输\client\download'
gd_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
gd_client.connect(('127.0.0.1',8123))

while True:

#1、发命令
  cmd=input('>>: ').strip() #get a.txt
  if not cmd:continue
  gd_client.send(cmd.encode('utf-8'))
  #2、以写的方式打开一个新文件,接收服务端发来的文件的内容写入客户的新文件
  #第一步:先收报头的长度
  obj=gd_client.recv(4)
  header_size=struct.unpack('i',obj)[0]
  # 第二步:再收报头
  header_bytes = gd_client.recv(header_size)
  # 第三步:从报头中解析出对真实数据的描述信息
  header_json = header_bytes.decode('utf-8')
  header_dic = json.loads(header_json)
  '''
  header_dic = {
    'filename': filename, # 1.txt
    'file_size': os.path.getsize(r'%s\%s' % (share_dir, filename)) # 路径/1.txt
  }  
  '''
  total_size = header_dic['file_size']
  file_name = header_dic['filename']
  # 第四步:接收真实的数据
  with open(r'%s\%s'%(download_dir, file_name),'wb') as f:
    recv_size = 0
    while recv_size < total_size:
      line = gd_client.recv(1024)
      f.write(line)
      recv_size += len(line)
      print('总大小:%s  已下载大小:%s' % (total_size, recv_size))
gd_client.close()​

server:

#!/usr/bin/env python
# -*-coding:utf-8 -*-
import socket
import subprocess
import struct
import json
import os
share_dir = r'D:\Python\python_learning\gd\code\part3\02网络编程\文件传输\server\share'
gd_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
gd_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
gd_server.bind(('127.0.0.1', 8123)) # 0-65535: 0-1024给操作系统使用
gd_server.listen(5)
while True:
  conn, client_addr = gd_server.accept()
  while True: # 通信循环
    try:
      # 1、收命令
      res = conn.recv(8096) # b'get 1.txt'
      if not res: break # 适用于linux操作系统
      # 2、解析命令,提取相应命令参数
      cmds = res.decode('utf-8').split() # ['get','1.txt']
      filename = cmds[1]
      # 3、以读的方式打开文件,读取文件内容发送给客户端
      # 第一步:制作固定长度的报头
      header_dic = {
        'filename': filename, # 1.txt
        'file_size':os.path.getsize(r'%s\%s'%(share_dir, filename)) # 路径/1.txt
      }
      header_json = json.dumps(header_dic)
      header_bytes = header_json.encode('utf-8')
      # 第二步:先发送报头的长度
      conn.send(struct.pack('i',len(header_bytes)))
      # 第三步:再发报头
      conn.send(header_bytes)
      # 第四步:再发送真实的数据
      with open('%s/%s'%(share_dir, filename),'rb') as f:
        for line in f:
          conn.send(line)
    except ConnectionResetError: # 适用于windows操作系统
      break
  conn.close()
gd_server.close()​

命令输入: get 1.txt ,然后即可将 server 端的 share文件内的 1.txt 文件 发送到 client 端的 download文件夹下

图片、视频、文字都可以发送,因为传送的是 二进制文件

原理是:server 端以读的形式打开文件,client端以写 的方式打开文件,然后client端把 一条一条的二进制写入文件后保存即可。

总结

以上所述是小编给大家介绍的python 通过 socket 发送文件的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
跟老齐学Python之复习if语句
Oct 02 Python
处理Python中的URLError异常的方法
Apr 30 Python
python实现简单聊天应用 python群聊和点对点均实现
Sep 14 Python
Python实现的堆排序算法示例
Apr 29 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
Jul 23 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
Python文字截图识别OCR工具实例解析
Mar 05 Python
Python ORM框架Peewee用法详解
Apr 29 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 Python
Selenium关闭INFO:CONSOLE提示的解决
Dec 07 Python
Python 打印中文字符的三种方法
Aug 14 #Python
django如何连接已存在数据的数据库
Aug 14 #Python
Python requests库用法实例详解
Aug 14 #Python
Python基于SMTP协议实现发送邮件功能详解
Aug 14 #Python
selenium+python实现1688网站验证码图片的截取功能
Aug 14 #Python
django+xadmin+djcelery实现后台管理定时任务
Aug 14 #Python
Python延时操作实现方法示例
Aug 14 #Python
You might like
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
JS location几个方法小姐
2008/07/09 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
图解js图片轮播效果
2015/12/20 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
Python实现从url中提取域名的几种方法
2014/09/26 Python
Python是编译运行的验证方法
2015/01/30 Python
低版本中Python除法运算小技巧
2015/04/05 Python
Python入门之三角函数全解【收藏】
2017/11/08 Python
python2.7实现FTP文件下载功能
2018/04/15 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动
2018/01/10 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
业务员岗位职责
2013/11/16 职场文书
高级技校毕业生自荐信
2013/11/18 职场文书
幼儿学前班评语
2014/12/29 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
物业接待员岗位职责
2015/04/15 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
python 离散点图画法的实现
2022/04/01 Python
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js