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实现给字典添加条目的方法
Sep 25 Python
详解Python中dict与set的使用
Aug 10 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
Dec 10 Python
python+pyqt实现12306图片验证效果
Oct 25 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
python中plot实现即时数据动态显示方法
Jun 22 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
python中partial()基础用法说明
Dec 30 Python
Python 旋转打印各种矩形的方法
Jul 09 Python
python实现身份证实名认证的方法实例
Nov 08 Python
wxPython实现文本框基础组件
Nov 18 Python
教你怎么用Python操作MySql数据库
May 31 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面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
jQuery中next方法用法实例
2015/04/24 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
浅谈struts1 & jquery form 文件异步上传
2017/05/25 jQuery
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
使用Python下载歌词并嵌入歌曲文件中的实现代码
2015/11/13 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
Python验证码截取识别代码实例
2020/05/16 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
HTML5+CSS3实现机器猫
2016/10/17 HTML / CSS
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
英语自荐信常用语句
2013/12/13 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
保密工作实施方案
2014/02/24 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
2016教师节问候语
2015/11/10 职场文书
MySQL数据库之存储过程 procedure
2022/06/16 MySQL