Python网络编程之使用TCP方式传输文件操作示例


Posted in Python onNovember 01, 2019

本文实例讲述了Python网络编程之使用TCP方式传输文件操作。分享给大家供大家参考,具体如下:

TCP文件下载器

客户端

需求:输入要下载的文件名,从服务器端将文件拷贝到本地

步骤:

1.创建TCP套接字,绑定端口
2.连接服务端
3.输入要下载的文件名
4.将文件名编码,并发送到服务端
5.接收服务端返回的数据
6.关闭套接字

代码

# 导入模块
import socket
# 创建套接字
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口
tcp_client_socket.bind(("", 8080))
# 连接IP地址和端口
tcp_client_socket.connect(("192.168.43.216", 8080))
file_name = input("请输入要下载的文件:\n")
# 文件名编码
tcp_client_socket.send(file_name.encode())
try:
  # 文件传输
  with open("C:/Users/Administrator/Desktop/" + file_name, "wb") as file:
    while True:
      # 接收数据
      file_data = tcp_client_socket.recv(1024)
      # 数据长度不为0写入文件
      if file_data:
        file.write(file_data)
      # 数据长度为0表示下载完成
      else:
        break
# 下载出现异常时捕获异常
except Exception as e:
  print("下载异常", e)
# 无异常则下载成功
else:
  print(file_name, "下载成功")
# 关闭客户端
tcp_client_socket.close()

服务端

需求:接收客户端发送的文件名,将文件传输给客户端

步骤:

1.创建TCP套接字,绑定端口
2.设置监听
3.接收客户端传输的文件名信息并解码
4.将文件发送到客户端
5.关闭客户端套接字(断开连接)

代码

# 导入模块
import socket
# 创建tcp服务端socket
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定端口
tcp_server_socket.bind(("", 8080))
# 设置监听,把服务端socket由主动套接字改成被动套接字,只能接收客户端的连接请求
tcp_server_socket.listen(128)
while True:
  # 接收客户端信息
  client_socket, client_ip = tcp_server_socket.accept()
  print("客户端:", client_ip, "连接")
  # 接收下载信息
  file_name_data = client_socket.recv(1024)
  # 解码下载信息
  file_name = file_name_data.decode()
  try:
    # 数据传输
    with open("/home/python/Desktop/" + file_name, "rb") as file:
      while True:
        # 读取文件数据
        file_data = file.read(1024)
        # 数据长度不为0表示还有数据没有写入
        if file_data:
          client_socket.send(file_data)
        # 数据为0表示传输完成
        else:
          print(file_name, "传输成功")
          break
  except Exception as e:
    print("传输异常:", e)
  # 关闭客户端连接
  client_socket.close()

测试

客户端请求

Python网络编程之使用TCP方式传输文件操作示例

服务器响应

Python网络编程之使用TCP方式传输文件操作示例

客户端接收

Python网络编程之使用TCP方式传输文件操作示例

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python3读取文件常用方法实例分析
May 22 Python
Python的Django框架中从url中捕捉文本的方法
Jul 20 Python
Python极简代码实现杨辉三角示例代码
Nov 15 Python
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
python2.7 json 转换日期的处理的示例
Mar 07 Python
Python minidom模块用法示例【DOM写入和解析XML】
Mar 25 Python
Python 监测文件是否更新的方法
Jun 10 Python
Django视图扩展类知识点详解
Oct 25 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
区分python中的进程与线程
Aug 13 Python
python 实现Harris角点检测算法
Dec 11 Python
python3判断IP地址的方法
Mar 04 Python
wxpython布局的实现方法
Nov 01 #Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
Nov 01 #Python
python基于socket实现的UDP及TCP通讯功能示例
Nov 01 #Python
python中time库的实例使用方法
Oct 31 #Python
Django实现分页显示效果
Oct 31 #Python
Django实现基于类的分页功能
Oct 31 #Python
python Django框架实现web端分页呈现数据
Oct 31 #Python
You might like
php 设计模式之 工厂模式
2008/12/19 PHP
php全角字符转换为半角函数
2014/02/07 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
javascript 打印页面代码
2009/03/24 Javascript
Javascript string 扩展库代码
2010/04/09 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
javascript中this关键字详解
2016/12/12 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
vue ssr 指南详读
2018/06/29 Javascript
详解vue中组件参数
2018/07/09 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
React实现todolist功能
2020/12/28 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
[55:11]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第一场 11.26
2020/11/30 DOTA
20招让你的Python飞起来!
2016/09/27 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
市三好学生主要事迹
2014/01/28 职场文书
给校长的建议书
2014/03/12 职场文书
校车安全责任书
2014/08/25 职场文书
演讲稿之我的初心我的成长
2019/08/12 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers
Python如何将list中的string转换为int
2022/07/15 Ruby