Linux 下使用 C++ 实现的 Web 文件服务器

2023-11-19

项目地址:

Github:https://github.com/shangguanyongshi/WebFileServer

在学习完成《TCP/IP 网络编程》和《Linux高性能服务器编程》后,阅读了一些Web服务器的相关代码,自动动手使用 C++11 实现了这个 Linux 下简单 Web 文件服务器,通过浏览器发送 HTTP 请求管理服务器指定文件夹下的所有文件。主要功能包括:

  • 以 HTML 页面形式返回该文件夹下的所有文件
  • 可以选择本地文件上传到服务器
  • 可以对列表中的文件文件执行下载操作
  • 可以删除服务器中的指定文件

HTML 的文件列表页面如下所示:

请添加图片描述

整体框架

  • 使用 Reactor 事件处理模型,通过统一事件源,主线程使用 epoll 监听所有的事件,工作线程负责执行事件的逻辑处理
  • 预先创建线程池,当有事件发生时,加入线程池的工作队列中,使用随机选择算法选择线程池中的一个线程处理工作队列的事件
  • 使用 HTTP GET 方法获取文件列表,发起下载文件、删除文件的请求。使用 POST 方法向服务器上传文件
  • 服务端使用有限状态机对请求消息进行解析,根据解析结果执行操作后,向客户端发送页面、发送文件或发送重定向报文
  • 服务端使用 sendfile 函数实现零拷贝数据发送

请添加图片描述

功能展示

获取文件列表

请添加图片描述

上传文件

请添加图片描述

下载文件

请添加图片描述

删除文件

请添加图片描述

运行

  1. build 项目
    sh ./build.sh
    
  2. 启动文件服务器
    ./main
    
  3. 在浏览器端输入 服务端ip:端口号(端口号默认是8888)
    serverip:8888
    

拓展

由于时间匆忙,该项目仅仅完成了最基础的功能,但是该项目还有很多可以继续拓展的功能,这里简单列出,以后会继续完善:

  • 现有程序中,运行日志直接输入到控制台,另设进程池实现日志服务(实现远程日志服务器)

  • 增加用户注册登陆功能,根据登陆账户提供各自的文件服务

  • 添加定时器定时处理非活动的连接

参考资料

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 下使用 C++ 实现的 Web 文件服务器 的相关文章

随机推荐

  • 如何解决项目管理中遇到的困难?

    其实是四个点 时间 成本 资源 范围 质量 1 这在四个点中 最重要的是质量 唯一不可变的也是质量 因此是一个以质量为中心的 三个点围绕的三角 2 基于第一点 在质量不变的情况下 考虑其它的三个点 时间 成本 范围 平衡也是在这三点之间平衡
  • 【毕业设计源码】基于Uniapp、Vue、Node的校园预约小程序系统(前后分离)

    功能描述 此系统包含小程序端和管理员后台端 小程序端是给用户预约操作的 具有以下模块 1 预约教室 2 取消预约 3 查看教室信息 4 收藏信息 包括新闻 教师 5 查看新闻 6 注册与登录PC管理后台是给后台管理员操作的 具有以下模块 1
  • Java数组笔记及算法练习

    Java数组笔记及算法练习 本文档创作于代码随想录算法训练营一期 参考文献链接 代码随想录 Java数组完全解析 java数组 超详细 文章目录 Java数组笔记及算法练习 1 数组基础 1 1一些基本说明 1 2数组的初始化 1 3数组的
  • 游戏修改器制作教程七:注入DLL的各种姿势

    教程面向有C C 基础的人 最好还要懂一些Windows编程知识 代码一律用Visual Studio 2013编译 如果你还在用VC6请趁早丢掉它 写这个教程只是为了让玩家更好地体验所爱的单机游戏 顺便学到些逆向知识 我不会用网络游戏做示
  • 数据结构——哈希排序

    哈希排序 就是用空间换取时间的一种排序方式 空间利用率达O n 算法思想 如果一个元素序列a里没有重复的元素 而我们需要找最大值或者前几个最大值时 怎么办呢 1 将这个a序列排序 然后直接选出目标值 2 开辟一个b数组 a里的每一个元素对应
  • WDK李宏毅学习笔记第八周01_Point Network

    文章目录 摘要 一 Pointer Network 1 1 目的 1 2 原理 1 3 优点 二 Applications Summarization 2 1 原理 2 2 优点 三 Applications Translation and
  • TensorFlow实战练习

    TensorFlow实战1 TensorFlow实现手写数字识别 前言 MNIST数据集 学习心得 全代码如下 TensorFlow实现手写数字识别 前言 本人正在学习TensorFlow的使用 使用的书籍是 TensorFlow实战 黄文
  • U-net源码讲解(Keras)

    更新 这个项目是2018 8月份写的 时间过得真快 现在都快一年了 其实深度学习这方面各种软硬件更新很快 如果你是新手学Unet 那么用keras版的也是蛮好的 但是到最后有自己的一点需求后再在此基础上搭自己的模块后Keras就显得很麻烦了
  • 浅谈HTTP中Get、Post、Put与Delete请求方式的区别

    1 GET请求会向数据库发索取数据的请求 从而来获取信息 该请求就像数据库的select操作一样 只是用来查询一下数据 不会修改 增加数据 不会影响资源的内容 即该请求不会产生副作用 无论进行多少次操作 结果都是一样的 2 与GET不同的是
  • 房价预测回归模型--tensorflow2.0学习笔记--tf.keras使用实例

    import tensorflow as tf import matplotlib as mpl import matplotlib pyplot as plt matplotlib inline import numpy as np im
  • Netty框架之概述及基本组件介绍

    概述 Netty是由JBOSS提供的一个java开源框架 是一个高性能 高可扩展性的异步事件 驱动的 网络应用程序框架 它极大地简化了TCP和UDP客户端和服务器开发等网络编 程 NIO有下面的缺点 JDK 的 NIO 底层由 epoll
  • 计算机文件及文件夹管理软件,常用管家(电脑文件夹管理工具)V1.1 免费版

    常用管家 电脑文件夹管理工具 是一款很优秀好用的文件夹管理助手 如果你需要一款好用的文件夹管理工具 不妨试试小编带来的这款常用管家软件 功能强大全面 使用后可以帮助用户更轻松便捷的管理文件夹 软件能够快速收藏和打开常用的文件夹 网站 并且能
  • 决策树实战:california房价预测

    Python3 7 决策树实战 california房价预测 网上有好多2 版本的代码 但是本地安装的是python3 7版本 在学习中遇到很多问题 有很多地方和2 版本的不一样 所以记录下来方便参考 侵权必删 导入模块 import pa
  • CISCN2018-WP

    MISC 验证码 用token登录 输入好验证码就可以得到flag Picture 图片隐写 一下就想到binwalk或者winhex打开试试 binwalk打开无果 将这段数据ctrl shift c复制出来 用下面python脚本生成z
  • HTML标签及浮动

  • 7.块设备驱动的I/O请求处理(2)

    不适用请求队列 使用请求队列对于一个机械磁盘设备而言的确有助于提高系统的性能 但是对于RAMDISK ZRAM Compressed RAM Block Device 等完全可真正随机访问的设备而言 无法从高级的请求队列逻辑中获益 对于这些
  • 稳定性相关大纲

    稳定性建设的几个维度 个人渣记录仅为自己搜索用的博客 CSDN博客 道法术器 稳定性相关 代码 产品灰度能力 降级百分比能力 动态diamond doom测试 单元测试 稳定性改造 高资源占用优化 方法 架构上改造降流量 例如心跳 内部逻辑
  • 真正的阅读者,是不需要荐书的

    From http www luanxiang org blog archives 2136 html 早上一个朋友在朋友圈里跟我说 上次你推荐的 信息简史 和 知识的边界 两本书 我觉得很不错 这条消息让我比较差异 首先我并没有 推荐 过
  • 数据集分割

    步骤 1 确定训练集和测试集是否同分布 常用方法 1 留出法 实现 直接将数据集拆分为互斥的训练集 验证集和测试集 划分比例 训练集 验证集 测试集 7 1 5 1 5 注意事项 单次使用留出法会导致模型不稳定 保证三种数据集中样本比例的相
  • Linux 下使用 C++ 实现的 Web 文件服务器

    项目地址 Github https github com shangguanyongshi WebFileServer 在学习完成 TCP IP 网络编程 和 Linux高性能服务器编程 后 阅读了一些Web服务器的相关代码 自动动手使用