python实现简单的tcp 文件下载


Posted in Python onSeptember 16, 2020

什么是下载?

首先客户端会问服务器,有没有一个xxx的文件啊?服务器开始寻找,找到后对客户端说有,然后客户端在本地新建一个文件,客户端从服务器收到一点数据,就写进这个文件中,再收到一点数据,再写入这个文件中,只要把所有的接收到的数据都写入到这个文件中,就完成了下载的操作。

所以下载需要2个部分。服务器的发送方和客户端的接收方。

我们这里不考虑复杂的情况。什么限速啊,验证啊,文件大小......只实现最简单的逻辑。

客户端参考代码

import socket

def main():

  # 创建socket
  tcp_client_socket = socket.socket(socket.AF_INET, socket.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)
  # 如果接收到数据再创建文件,否则不创建
  if recv_data:
    with open("[接收]"+file_name, "wb") as f:
      f.write(recv_data)

  # 关闭套接字
  tcp_client_socket.close()


if __name__ == "__main__":
  main()

服务端参考代码

import socket
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.socket(socket.AF_INET, socket.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()

以上就是python实现简单的tcp文件下载的详细内容,更多关于python tcp下载的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python语言实现机器学习的K-近邻算法
Jun 11 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
python中嵌套函数的实操步骤
Feb 27 Python
python tkinter窗口最大化的实现
Jul 15 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
利用rest framework搭建Django API过程解析
Aug 31 Python
python+mysql实现个人论文管理系统
Oct 25 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
python中sklearn的pipeline模块实例详解
May 21 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
实现Python3数组旋转的3种算法实例
Sep 16 #Python
Python私有属性私有方法应用实例解析
Sep 15 #Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 #Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 #Python
pycharm激活方法到2099年(激活流程)
Sep 22 #Python
pycharm专业版远程登录服务器的详细教程
Sep 15 #Python
深入浅析pycharm中 Make available to all projects的含义
Sep 15 #Python
You might like
Uncaught exception com_exception with message Failed to create COM object
2012/01/11 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
laravel安装和配置教程
2014/10/29 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
2017/05/09 PHP
Javascript的一种模块模式
2008/03/22 Javascript
js中cookie的使用详细分析
2008/05/28 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
js比较日期大小的方法
2015/05/12 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
使用命令行工具npm新创建一个vue项目的方法
2017/12/27 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
Django权限机制实现代码详解
2018/02/05 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
详解python tkinter模块安装过程
2020/01/06 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
大堂副理的岗位职责范文
2014/02/17 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
2015年个人思想总结
2015/03/09 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
python数字图像处理:图像简单滤波
2022/06/28 Python