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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
python使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
Python中函数的参数传递与可变长参数介绍
Jun 30 Python
python开发之str.format()用法实例分析
Feb 22 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
May 17 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
Python3 itchat实现微信定时发送群消息的实例代码
Jul 12 Python
python nmap实现端口扫描器教程
May 28 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
pyftplib中文乱码问题解决方案
Jan 11 Python
python 回溯法模板详解
Feb 26 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解压文件代码实现php在线解压
2014/02/13 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
JavaScript基础之AJAX简单的小demo
2017/01/29 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
python单链表实现代码实例
2013/11/21 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
python3实现猜数字游戏
2020/12/07 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
高级Java程序员面试题
2016/06/23 面试题
六查六看剖析材料
2014/02/15 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
琅琊山导游词
2015/02/05 职场文书
《司马光》教学反思
2016/02/22 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android