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采用raw_input读取输入值的方法
Aug 18 Python
python 实现上传图片并预览的3种方法(推荐)
Jul 14 Python
Python拼接字符串的7种方法总结
Nov 01 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
python selenium 弹出框处理的实现
Feb 26 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
Python类中的装饰器在当前类中的声明与调用详解
Apr 15 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 Python
keras实现VGG16 CIFAR10数据集方式
Jul 07 Python
python定义类的简单用法
Jul 24 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
【COS正片】蕾姆睡衣cos,纯洁可爱被治愈了 cn名濑弥七
2020/03/02 日漫
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
easyui validatebox验证
2016/04/29 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
2018/03/22 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
查看django版本的方法分享
2018/05/14 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
超市开学活动方案
2014/03/01 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
政府个人对照检查材料
2014/08/28 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
上诉答辩状范文
2015/05/22 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
Python包argparse模块常用方法
2021/06/04 Python
MySQL创建管理子分区
2022/04/13 MySQL