项目地址:

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
    

拓展

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

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

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

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

参考资料

  • 《TCP/IP 网络编程》:https://book.douban.com/subject/25911735/
  • 《Linux高性能服务器编程》:https://book.douban.com/subject/24722611/
  • TinyWebServer:https://github.com/qinguoyi/TinyWebServer

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

  1. linux下tomcat部署java web项目_在linux下用tomcat部署java web项目的过程与注意事项

    在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...

  2. linux查看gogs版本,linux下 gogs的安装和web钩子

    linux系统下 gogs下载安装以及web钩子的使用 (1)下载gogs  官方网址:https://dl.gogs.io/ 选择合适的版本,解压后就可以使用了 启动gogs的命令:  ./gos ...

  3. windows,linux下SVN实现自动更新WEB目录

    http://www.bestphper.cn/article-132.html 通过SVN进行版本库管理,每次提交后,都要在SVN服务器更新最新上传的版本到WEB目录进行同步.操作比较烦琐,而且效率 ...

  4. 在linux下用tomcat部署java web项目的过程与注意事项(转)

    一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载Java SE 6 Update 27 根据操 ...

  5. linux设置web服务器配置,Linux下配置功能完善的Web服务器

    调试环境:Redhat9.0Apache1.3.29Mysql3.23.58PHP4.3.4 Linux系统的安装我就不讲了,这是基本功,其实这篇文章在类似Redhat的其他linux也应该通用,大家 ...

  6. Linux下HTTP Server

    想在Linux下实现一个简单的web Server并不难.一个最简单的HTTP Server不过是一个高级的文件服务器,不断地接收客户端(浏览器)发送的HTTP请求,解析请求,处理请求,然后像客户端回 ...

  7. linux安装eclipse运行web,Linux安装Tomcat,运行Eclipse,web项目

    到官网下载:https://tomcat.apache.org/download-80.cgi  在这里是8.5.39版本 下载tar,gz 提取解压后,我这里是放到opt目录下 cd  切换目录 / ...

  8. java version 和javac版本不一致_解决linux下javac -version和java -version版本显示不一致...

    [javascript] view plaincopy [root@localhost usr]# $JAVA_HOME/bin/java -version bash: /bin/java: 没有那个 ...

  9. Linux 下后台运行程序,查看和关闭后台运行程序(转载)

    1.运行.sh文件 直接用./sh 文件就可以运行,但是如果想后台运行,即使关闭当前的终端也可以运行的话,需要nohup命令和&命令. (1)&命令 功能:加在一个命令的最后,可以把这 ...

最新文章

  1. [NOI2005]聪聪与可可(期望dp)
  2. Go基础编程:延迟调用defer
  3. 创建一个简单的存储过程(RroGetA_Z),要求输出A到Z之间的26个大写字母
  4. 毕业后想拿大厂 Offer?你得完整拥有这些计算机知识体系!
  5. 【WPF】鼠标拖拽功能DragOver和Drop
  6. 1.3 安装Oracle遇到的问题-yum更新配置
  7. MongoDB 固定集合详解
  8. Vue.js对数组对象的序号字段初始化重新生成序号
  9. loadrunner11中文版破解文档+录制脚本(图/文)
  10. 不义联盟2显示服务器,打开不义联盟2提示网络异常或者连接不上
  11. 学计算机语言从何开始,小孩学编程从哪开始
  12. 魅蓝note2手机计算机打开教程,魅族 魅蓝note2 开启USB调试模式
  13. 800名科学家联名反对统计学意义,放弃P值“决定论”!
  14. 数字油田中的虚拟光纤
  15. Windows命令:Net使用详解
  16. 网关系统就该这么设计(万能通用),稳的一批!
  17. 【ML】英雄联盟对局胜负预测任务
  18. 《机器学习方法(第三版)—— 李航》学习笔记(一)附代码
  19. 在 ubuntu20.04下搭建 lamp 环境并制作静态网页
  20. 通过python分析微信好友数据

热门文章

  1. uniapp上传图片和视频到OSS
  2. python毕业设计作品基于django框架 教室图书馆座位预约系统毕设成品(4)开题报告
  3. cs224n Assignment 1:exploring_word_vectors
  4. 基于最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇系统性实践技能提升
  5. 中宏涌晟适合工薪族的五种个人投资理财方式
  6. 九思OA的十大技术特色
  7. vue轻松实现虚拟滚动
  8. Notion AI vs ChatGPT vs New Bing 三款AI软件使用体验对比
  9. vue点击事件不生效
  10. php如何删除非空目录,php怎样删除非空目录_后端开发