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 相关文章推荐
利用Fn.py库在Python中进行函数式编程
Apr 22 Python
在Python中编写数据库模块的教程
Apr 29 Python
Python正则抓取网易新闻的方法示例
Apr 21 Python
python实现12306抢票及自动邮件发送提醒付款功能
Mar 08 Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
把vgg-face.mat权重迁移到pytorch模型示例
Dec 27 Python
Python内置函数locals和globals对比
Apr 28 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 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
人大复印资料处理程序_补充篇
2006/10/09 PHP
PHP 遍历文件实现代码
2011/05/04 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
Javascript 详解封装from表单数据为json串进行ajax提交
2017/03/29 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
python操作mysql数据库
2017/03/05 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
python3的数据类型及数据类型转换实例详解
2019/08/20 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
python 实现控制鼠标键盘
2020/11/27 Python
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
小学红领巾中秋节广播稿
2014/01/13 职场文书
淘宝活动策划方案
2014/02/06 职场文书
公司中秋节活动方案
2014/02/12 职场文书
车队司机自我鉴定
2014/03/02 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
Java中的继承、多态以及封装
2022/04/11 Java/Android