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 XML RPC服务器端和客户端实例
Nov 22 Python
简单介绍Python中的floor()方法
May 15 Python
Python遍历pandas数据方法总结
Feb 09 Python
Python实现繁体中文与简体中文相互转换的方法示例
Dec 18 Python
Python I/O与进程的详细讲解
Mar 08 Python
Pandas之ReIndex重新索引的实现
Jun 25 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 Python
如何利用pygame实现打飞机小游戏
May 30 Python
pandas中DataFrame数据合并连接(merge、join、concat)
May 30 Python
浅析Django接口版本控制
Jun 26 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 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
在线短消息收发的程序,不用数据库
2006/10/09 PHP
用PHP查询域名状态whois的类
2006/11/25 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
可输入的下拉框
2006/06/19 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
jquery实现表单获取短信验证码代码
2017/03/13 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python学习资料
2007/02/08 Python
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
Python使用type关键字创建类步骤详解
2019/07/23 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
Python 炫技操作之合并字典的七种方法
2020/04/10 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
html5自定义video标签的海报与播放按钮功能
2019/12/04 HTML / CSS
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
天游软件面试
2013/11/23 面试题
五一家具促销方案
2014/01/10 职场文书
学生自我评价范文
2014/02/02 职场文书
会计专业大学生职业生涯规划书
2014/02/11 职场文书
班训口号大全
2014/06/18 职场文书
涨价通知
2015/04/23 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
大学运动会通讯稿
2015/07/18 职场文书