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练习程序批量修改文件名
Jan 16 Python
python reduce 函数使用详解
Dec 05 Python
python3.5+tesseract+adb实现西瓜视频或头脑王者辅助答题
Jan 17 Python
python定向爬取淘宝商品价格
Feb 27 Python
python如何对实例属性进行类型检查
Mar 20 Python
python和shell获取文本内容的方法
Jun 05 Python
对Python中数组的几种使用方法总结
Jun 28 Python
有关Python的22个编程技巧
Aug 29 Python
Python常用特殊方法实例总结
Mar 22 Python
浅谈Python类中的self到底是干啥的
Nov 11 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
利用Python如何实时检测自身内存占用
May 09 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 extract 将数组拆分成多个变量的函数
2010/06/30 PHP
php iconv() : Detected an illegal character in input string
2010/12/05 PHP
Yii清理缓存的方法
2016/01/06 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
JS批量替换内容中关键词为超链接
2017/02/20 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
使用vant的地域控件追加全部选项
2020/11/03 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
Python调用C# Com dll组件实战教程
2017/10/12 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
python logging添加filter教程
2019/12/24 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
详解pandas中iloc, loc和ix的区别和联系
2020/03/09 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
Python中qutip用法示例详解
2020/10/02 Python
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
几个Shell Script面试题
2012/08/31 面试题
Python里面search()和match()的区别
2016/09/21 面试题
开展批评与自我批评发言材料
2014/05/15 职场文书
企业活动策划方案
2014/06/02 职场文书
大客户经理岗位职责
2015/04/09 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python