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创建模块及模块导入的方法
May 27 Python
Ubuntu 下 vim 搭建python 环境 配置
Jun 12 Python
用Python shell简化开发
Aug 08 Python
python 不同方式读取文件速度不同的实例
Nov 09 Python
对Python 语音识别框架详解
Dec 24 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
Python任务自动化工具tox使用教程
Mar 17 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 Python
python sleep和wait对比总结
Feb 03 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
德劲1104的电路分析与改良
2021/03/01 无线电
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
浅谈Python黑帽子取代netcat
2018/02/10 Python
解决python 输出是省略号的问题
2018/04/19 Python
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
Selenium的使用详解
2018/10/19 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
python 默认参数相关知识详解
2019/09/18 Python
详解Django配置优化方法
2019/11/18 Python
python实现简单坦克大战
2020/03/27 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
优秀中学生事迹材料
2014/01/31 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
浅谈Python3中datetime不同时区转换介绍与踩坑
2021/08/02 Python
我的收音机情缘
2022/04/05 无线电