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 相关文章推荐
python网络编程学习笔记(六):Web客户端访问
Jun 09 Python
python多重继承实例
Oct 11 Python
详解Python字符串对象的实现
Dec 24 Python
深入理解Django中内置的用户认证
Oct 06 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
Nov 20 Python
zookeeper python接口实例详解
Jan 18 Python
python线程池threadpool使用篇
Apr 27 Python
django自带的server 让外网主机访问方法
May 14 Python
Django REST framework 分页的实现代码
Jun 19 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 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桌面中心(四) 数据显示
2007/03/11 PHP
在PHP中使用反射技术的架构插件使用说明
2010/05/18 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
PHP实现微信公众平台音乐点播
2014/03/20 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
php和redis实现秒杀活动的流程
2019/07/17 PHP
JavaScript高级程序设计
2006/12/29 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
用C/C++来实现 Node.js 的模块(二)
2014/09/24 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
Python模块常用四种安装方式
2020/10/20 Python
美国在线宠物商店:Chewy
2019/01/12 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
经典安踏广告词
2014/03/21 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
公司年会主持词范文!
2019/05/07 职场文书
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技