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 切片和range()用法说明
Mar 24 Python
python解析xml文件实例分享
Dec 04 Python
使用python解析xml成对应的html示例分享
Apr 02 Python
Python处理RSS、ATOM模块FEEDPARSER介绍
Feb 18 Python
Python批量转换文件编码格式
May 17 Python
十条建议帮你提高Python编程效率
Feb 16 Python
安装Python的教程-Windows
Jul 22 Python
使用Python的turtle模块画图的方法
Nov 15 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
Aug 23 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 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
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
PHP开发的一些注意点总结
2010/10/12 PHP
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
2020/02/03 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
JavaScript实现in-place思想的快速排序方法
2016/08/07 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
Thinkjs3新手入门之如何使用静态资源目录
2017/12/06 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
jQuery实现动态加载select下拉列表项功能示例
2018/05/31 jQuery
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
python简单读取大文件的方法
2016/07/01 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
毕业生自我推荐
2013/11/04 职场文书
会计大学生职业生涯规划书范文
2014/01/13 职场文书
遗嘱公证书标准样本
2014/04/08 职场文书
财政专业大学生职业生涯规划书
2014/09/17 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python