python基于TCP实现的文件下载器功能案例


Posted in Python onDecember 10, 2019

本文实例讲述了python基于TCP实现的文件下载器功能。分享给大家供大家参考,具体如下:

服务器 参考代码如下:

from socket import *
import sys
def get_file_content(file_name):
  """获取文件的内容"""
  try:
    with open(file_name, "rb") as f:
      content = f.read()
    return content
  except:
    print("没有下载的文件:%s" % file_name)
def main():
  if len(sys.argv) != 2:
    print("请按照如下方式运行:python3 xxx.py 7890")
    return
  else:
    # 运行方式为python3 xxx.py 7890
    port = int(sys.argv[1])
  # 创建socket
  tcp_server_socket = socket(AF_INET, SOCK_STREAM)
  # 本地信息
  address = ('', port)
  # 绑定本地信息
  tcp_server_socket.bind(address)
  # 将主动套接字变为被动套接字
  tcp_server_socket.listen(128)
  while True:
    # 等待客户端的链接,即为这个客户端发送文件
    client_socket, clientAddr = tcp_server_socket.accept()
    # 接收对方发送过来的数据
    recv_data = client_socket.recv(1024) # 接收1024个字节
    file_name = recv_data.decode("utf-8")
    print("对方请求下载的文件名为:%s" % file_name)
    file_content = get_file_content(file_name)
    # 发送文件的数据给客户端
    # 因为获取打开文件时是以rb方式打开,所以file_content中的数据已经是二进制的格式,因此不需要encode编码
    if file_content:
      client_socket.send(file_content)
    # 关闭这个套接字
    client_socket.close()
  # 关闭监听套接字
  tcp_server_socket.close()
if __name__ == "__main__":
  main()

客户端 参考代码如下:

from socket import *
def main():
  # 创建socket
  tcp_client_socket = socket(AF_INET, SOCK_STREAM)
  # 目的信息
  server_ip = input("请输入服务器ip:")
  server_port = int(input("请输入服务器port:"))
  # 链接服务器
  tcp_client_socket.connect((server_ip, server_port))
  # 输入需要下载的文件名
  file_name = input("请输入要下载的文件名:")
  # 发送文件下载请求
  tcp_client_socket.send(file_name.encode("utf-8"))
  # 接收对方发送过来的数据,最大接收1024个字节(1K)
  recv_data = tcp_client_socket.recv(1024)
  # print('接收到的数据为:', recv_data.decode('utf-8'))
  # 如果接收到数据再创建文件,否则不创建
  if recv_data:
    with open("[接收]"+file_name, "wb") as f:
      f.write(recv_data)
  # 关闭套接字
  tcp_client_socket.close()
if __name__ == "__main__":
  main()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
详解Python当中的字符串和编码
Apr 25 Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
Python 专题一 函数的基础知识
Mar 16 Python
用Python shell简化开发
Aug 08 Python
python中pika模块问题的深入探究
Oct 13 Python
Python+OpenCV图片局部区域像素值处理详解
Jan 23 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
Apr 29 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
Jun 29 Python
python 使用csv模块读写csv格式文件的示例
Dec 02 Python
Python标准库之typing的用法(类型标注)
Jun 02 Python
使用pandas的box_plot去除异常值
Dec 10 #Python
Python 中如何实现参数化测试的方法示例
Dec 10 #Python
利用python读取YUV文件 转RGB 8bit/10bit通用
Dec 09 #Python
YUV转为jpg图像的实现
Dec 09 #Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 #Python
Python箱型图处理离群点的例子
Dec 09 #Python
Python实现非正太分布的异常值检测方式
Dec 09 #Python
You might like
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
Postman的下载及安装教程详解
2018/10/16 Javascript
Vue 后台管理类项目兼容IE9+的方法示例
2019/02/20 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
JavaScript数组及常见操作方法小结
2019/11/13 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
利用Python命令行传递实例化对象的方法
2016/11/02 Python
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
python使用代理ip访问网站的实例
2018/05/07 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
pytorch SENet实现案例
2020/06/24 Python
基于python实现计算两组数据P值
2020/07/10 Python
python使用建议技巧分享(三)
2020/08/18 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
学生个人自我鉴定范文
2014/03/28 职场文书
技术员岗位职责范本
2015/04/11 职场文书
2015大学迎新标语
2015/07/16 职场文书
教师节获奖感言
2015/07/31 职场文书
关于教师节的广播稿
2015/08/19 职场文书
在pycharm中无法import所安装的库解决方案
2021/05/31 Python
JavaScript数组reduce()方法的语法与实例解析
2021/07/07 Javascript