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脚本获取操作系统版本信息
Dec 17 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
解决tensorflow模型参数保存和加载的问题
Jul 26 Python
python实现贪吃蛇小游戏
Mar 21 Python
基于Python+Appium实现京东双十一自动领金币功能
Oct 31 Python
Python关于反射的实例代码分享
Feb 20 Python
如何解决pycharm调试报错的问题
Aug 06 Python
python 监控logcat关键字功能
Sep 04 Python
Django ModelForm组件原理及用法详解
Oct 12 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
python实现定时发送邮件到指定邮箱
Dec 23 Python
利用python绘制正态分布曲线
Jan 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
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
根据中文裁减字符串函数的php代码
2013/12/03 PHP
php操作MongoDB基础教程(连接、新增、修改、删除、查询)
2014/03/25 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
php文件缓存类汇总
2014/11/21 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
2015/06/29 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
JS实现的简洁纵向滑动菜单(滑动门)效果
2015/10/19 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
2017/01/04 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
vue v-model的用法解析
2020/10/19 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Mac 上切换Python多版本
2017/06/17 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
Django重设Admin密码过程解析
2020/02/10 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
希尔顿酒店中国网站:Hilton中国
2017/03/11 全球购物
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
小学教师自我鉴定
2013/11/07 职场文书
毕业生自荐书
2013/12/18 职场文书
管理提升方案
2014/06/04 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书