用C++实现HTTP服务器 - Windows平台(开放源代码) - Que's C++ Studio - 博客频道 - CSDN.NET
2012-07-18 09:31
435 查看
用C++实现HTTP服务器 - Windows平台(开放源代码) - Que's C++ Studio - 博客频道 - CSDN.NET
用C++实现HTTP服务器 - Windows平台(开放源代码)
分类:
C++
HTTP
2011-07-08 17:19
3251人阅读
评论(18)
收藏
举报
用C++实现HTTP服务器 - Windows平台
软件名: Que's HTTP Server (点击下载最新版含源代码)
作者: 阙荣文 - Que's C++ Studio
版权说明: 免费,开放源代码,禁止用作商业用途.
日期: 2011.7.8
1. 目的和用途
用C++实现一个Windows下的,简单的HTTP服务器模型,用作局域网内的文件共享工具.
我以前在公司里,同事之间经常要共享一些大文件(超过2G),如果直接共享Windows目录,非常不安全不说,经常还因为各种各样的问题导致无法访问:比如guest用户被禁用,防火墙拦截等.现在,我只要开启这个程序(一个非常简单的程序,只有一个几百K大小的EXE文件),对方就可以用浏览器(IE,Firefox等都可以,还有比浏览器安装范围更广的客户端吗?)访问到我共享的文件,还支持断点续传,多么惬意.
另外,这是一个符合协议要求的HTTP服务器,理论上说,放到公网上也是完全可以的,只是功能没有成熟的Apache, IIS等丰富,安全性能也不足,但是作为一个学习的模型,提供文件下载服务还是没问题的.
2. 原理说明
(1) 关于HTTP协议.
我个人非常非常喜欢HTTP协议,这是一个简洁的,基于文本的,应答式的协议.
基于文本的一大好处是调试特别方便,因为所有的数据都是可以直接读出的文本,程序结果正确与否一目了然,另外还有很多其它好处,可以参考<<UNIX编程艺术>>,里面有一章专门讲基于文本的协议的好处,深以为然.
HTTP协议的交流过程可以简单的描述为:双方建立TCP连接,客户端(通常是浏览器)发送一段固定格式的文本(所谓的请求),服务器根据客户端请求的内容,生成并回应一段固定格式的文本(所谓的回应头)和文件内容(如果客户端请求的是文件下载的话),数据发送完毕后,断开连接.
这就是我们今天网络世界的基础,没错,就这么简单.
当然,客户端的请求和服务器的回应头都有格式要求,可以读一读W3C关于HTTP协议的文档.(Que's HTTP Server发行包内也包含了一份,请点击文章开头的链接下载.)
(2) Windows的网络模型.
Windows系统中,当属完成端口模型的网络性能最好.作为可能面临巨大网络压力的HTTP服务器,完成端口模型是唯一的选择.
完成端口模型用一种类似于回调的方式处理网络操作,所有的网络操作都不会阻塞,而是排队后直接返回,等到操作完成,系统会触发一个完成端口事件以通知应用程序.所以应用程序只要用一个线程一直检查对应的完成端口就可以得到网络操作的结果.和回调不同的是,系统允许多个线程同时等待同一个完成端口事件,Windows系统确保对于一个完成端口时间,只有一个等待线程被唤醒.这样,对于有多个CPU的机器,我们可以创建多个线程(一个CPU对应一个线程)等待同一个完成端口事件以并行的方式处理网络事件以充分发挥机器的性能.
关于完成端口编程方面的指导请参考<<Windows网络编程技术>>(微软出版,Anthony Jones著)第八章.
用C++实现HTTP服务器 - Windows平台(开放源代码)
分类:C++
HTTP
2011-07-08 17:19
3251人阅读
评论(18)
收藏
举报
用C++实现HTTP服务器 - Windows平台
软件名: Que's HTTP Server (点击下载最新版含源代码)
作者: 阙荣文 - Que's C++ Studio
版权说明: 免费,开放源代码,禁止用作商业用途.
日期: 2011.7.8
1. 目的和用途
用C++实现一个Windows下的,简单的HTTP服务器模型,用作局域网内的文件共享工具.
我以前在公司里,同事之间经常要共享一些大文件(超过2G),如果直接共享Windows目录,非常不安全不说,经常还因为各种各样的问题导致无法访问:比如guest用户被禁用,防火墙拦截等.现在,我只要开启这个程序(一个非常简单的程序,只有一个几百K大小的EXE文件),对方就可以用浏览器(IE,Firefox等都可以,还有比浏览器安装范围更广的客户端吗?)访问到我共享的文件,还支持断点续传,多么惬意.
另外,这是一个符合协议要求的HTTP服务器,理论上说,放到公网上也是完全可以的,只是功能没有成熟的Apache, IIS等丰富,安全性能也不足,但是作为一个学习的模型,提供文件下载服务还是没问题的.
2. 原理说明
(1) 关于HTTP协议.
我个人非常非常喜欢HTTP协议,这是一个简洁的,基于文本的,应答式的协议.
基于文本的一大好处是调试特别方便,因为所有的数据都是可以直接读出的文本,程序结果正确与否一目了然,另外还有很多其它好处,可以参考<<UNIX编程艺术>>,里面有一章专门讲基于文本的协议的好处,深以为然.
HTTP协议的交流过程可以简单的描述为:双方建立TCP连接,客户端(通常是浏览器)发送一段固定格式的文本(所谓的请求),服务器根据客户端请求的内容,生成并回应一段固定格式的文本(所谓的回应头)和文件内容(如果客户端请求的是文件下载的话),数据发送完毕后,断开连接.
这就是我们今天网络世界的基础,没错,就这么简单.
当然,客户端的请求和服务器的回应头都有格式要求,可以读一读W3C关于HTTP协议的文档.(Que's HTTP Server发行包内也包含了一份,请点击文章开头的链接下载.)
(2) Windows的网络模型.
Windows系统中,当属完成端口模型的网络性能最好.作为可能面临巨大网络压力的HTTP服务器,完成端口模型是唯一的选择.
完成端口模型用一种类似于回调的方式处理网络操作,所有的网络操作都不会阻塞,而是排队后直接返回,等到操作完成,系统会触发一个完成端口事件以通知应用程序.所以应用程序只要用一个线程一直检查对应的完成端口就可以得到网络操作的结果.和回调不同的是,系统允许多个线程同时等待同一个完成端口事件,Windows系统确保对于一个完成端口时间,只有一个等待线程被唤醒.这样,对于有多个CPU的机器,我们可以创建多个线程(一个CPU对应一个线程)等待同一个完成端口事件以并行的方式处理网络事件以充分发挥机器的性能.
关于完成端口编程方面的指导请参考<<Windows网络编程技术>>(微软出版,Anthony Jones著)第八章.
相关文章推荐
- 常用排序算法的c++实现(冒泡,选择,插入,堆,shell,快速,归并 )与sort()对比 - coder_xia的专栏 - 博客频道 - CSDN.NET
- C++中字母大小写转换实现的优化 - 程序即人生 - 博客频道 - CSDN.NET
- 用thrift实现客户端和服务端的C++代码 - 金美光的小屋 - 博客频道 - CSDN.NET
- 用C++实现HTTP服务器 - Windows平台(开放源代码)
- 用C++实现HTTP服务器 - Windows平台(开放源代码)
- c++ 如何获取系统时间 - zjnig711的信息仓库 - 博客频道 - CSDN.NET
- Google C++ Style中允许使用的Boost库(1) - 程序即人生 - 博客频道 - CSDN.NET
- cloudflare的新waf,用Lua实现的 - 囧囧有神的专栏 - 博客频道 - CSDN.NET
- 【转】【Linux】生产者消费者编程实现-线程池+信号量 - 江南烟雨 - 博客频道 - CSDN.NET
- Maven使用Cargo实现自动化部署 - steveguoshao的专栏 - 博客频道 - CSDN.NET
- nginx+lua+redis实现验证码防采集 - yanggd1987的专栏 - 博客频道 - CSDN.NET
- python实现的文本编辑器 - Skycrab - 博客频道 - CSDN.NET
- 浏览器九宫格的简单实现 - 蒋宇捷的专栏 - 博客频道 - CSDN.NET
- nginx+lua+redis实现验证码防采集 - yanggd1987的专栏 - 博客频道 - CSDN.NET
- 基于数组的队列实现(C语言) - ahljjun的专栏 - 博客频道 - CSDN.NET
- 分别用数组和链表实现堆栈(C语言版) - ahljjun的专栏 - 博客频道 - CSDN.NET
- Python实现批量执行ArcGIS版本的协调和提交 - ArcGIS技术研究 - 博客频道 - CSDN.NET
- Linux下socket实现网页抓取 - Unicorn - 博客频道 - CSDN.NET
- curl c/c++ api接口使用例程 - Mr_Von的专栏 - 博客频道 - CSDN.NET
- 在 Linux 和 Windows 下给 Tomcat 分配大内存设置方法 - 偷得浮生半日闲 - 博客频道 - CSDN.NET