实现一个HTTP服务器的Demo
在学完linux高级编程后,开启一个HTTP服务器的demo,因为一个完整的http服务器涉及的范围很广,远不是一个人可以全部完成的。所以这个demo只是实现了http服务器的一个简单的功能->GET请求。包括请求html文件和图片(jpg &png)。下面是实现的一些思路:
工作流程:
1.获取初始化服务器配置信息
2.初始化服务器参数
3.启动服务器,监听端口
4.与客户端建立链接,启动子进程处理请求
5.解析请求文件,获得请求文件头if 请求方式为 GET ----参见6else----暂不处理
6.获取请求文本类型
7.获得请求文件路径
8.开启多线程处理文件if 文件存在读取文件数据else 文件不存在读取error.html
9.生成响应头
10发送响应头
11.发送响应数据
12断开连接
关于服务器与客户端(浏览器)连接后的工作时序图如下:
关于代码,下面准备传送门:https://gitee.com/dengmingli/httpFuWuQi/tree/master
实现一个HTTP服务器的Demo相关推荐
- Dubbo入门介绍---搭建一个最简单的Demo框架
Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbo zookeeper 更多 个人分类: ...
- go html vue,用Go+Vue.js快速搭建一个Web应用(初级demo)
Vue.js做为目前前端最热门的库之一,为快速构建并开发前端项目多了一种思维模式.本文给大家介绍用Go+Vue.js快速搭建一个Web应用(初级demo). 环境准备: 1. 安装go语言,配置go开 ...
- api怎么写_使用Node.js原生API写一个web服务器
Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...
- 客户端服务器通信demo(续) -- 使用二进制协议 (附源码)
转载连接: http://blog.csdn.net/zhuweisky/article/details/11827797 在网络上,交互的双方基于TCP或UDP进行通信,通信协议的格式通常分为两类: ...
- 【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)
系列文章目录 [spring authorization server系列教程](一)入门系列,快速构建一个授权服务器 文章目录 系列文章目录 前言 一.目前已实现的功能 二.入门,一步一步快速开始构 ...
- 从零开始一个http服务器(五)-模拟cgi
从零开始一个http服务器-模拟cgi(五) 代码地址 : https://github.com/flamedancer/cserver git checkout step5 运行: make cle ...
- php树莓派养鱼,树莓派学习11: 将树莓派变成一个Web服务器
将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...
- js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...
本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...
- 一文读懂tomcat组件--一个web服务器的架构演化史
1. tomcat是谁? 2. tomcat可以做什么? tomcat是一个web容器,可以将web应用部署到tomcat,由它提供web服务,一个web容器中可以部署多个web应用,这些web应用可 ...
- 在Linux中搭建一个FTP服务器
在Linux中搭建一个ftp服务器,以供两个工作小组保管文件使用.禁用匿名.第一个小组使用ftp账号:ftp1,工作目录在:/var/ftp/ftp1:第二个小组使用ftp2,工作目录在:/var/f ...
最新文章
- Ant 条件判断 if
- pandas处理mysql 展现wpf_Python:用Pandas读CSV文件写到MySQL
- CentOS7.3下配置 Apache2.4 + MySQL5.7 + PHP7.1.8
- 【Android 安全】DEX 加密 ( Application 替换 | 获取 ContextImpl、ActivityThread、LoadedApk 类型对象 | 源码分析 )
- 【已解决】虚拟机提示VMware Workstation cannot connect to the virtual machine的问题
- 直接打开php非法请求
- 入门C语言20问20答
- leetcode 有效的字母异位词
- android横向纵向切换,【报Bug】安卓竖屏切换到横屏后,再切换回竖屏,不能正常还原...
- request库的基本使用
- 百度硬盘搜索结盟IBM,Lotus邮件也能搜索
- CIF、DCIF、D1分辨率
- CS61A自学者学习指南
- arc093F Dark Horse
- 编码,隐匿在计算机软硬件背后的语言读书笔记(作者序)
- Unity3D 动态加载资源方式
- mysql date 24小时制_SpringBoor连接mysql数据库取数据库中时间格式是12小时制的时间,如何显示成24小时制...
- 脚本安装爱普生790K打印机安装完成之后销毁程序(其他版本打印机更换inf文件即可)
- 中国为什么要买美国国债
- 扒一扒那些叫欧拉的定理们(六)——九点圆定理的证明
热门文章
- 一般处理程序里使用session对象为null,未将对象引用到实例化
- nvidia-smi介绍
- springcloud架构特点_董事长挖来一位京东T9架构师,送我们两份微服务文档,实在太香了...
- ai 2.5d插件_【插画AI教程】从0到1,学会16 种热门插画设计风格!
- android字体单位sp,Android中的常用尺寸单位(dp、sp)快速入门教程
- Python科学计算——Numpy.genfromtxt
- Python程序发布(打包)及pyInstaller、cx_Freeze工具使用介绍
- 常见排序算法之基数排序
- 编码转换的php小脚本,php编码转换小例子
- mysql 存储过程 查询语句怎么写_mysql 查询数据库中的存储过程与函数的语句