用C++实现HTTP服务器 - Windows平台(开放源代码)

本文介绍了一个轻量级的C++编写的Windows HTTP服务器,支持设置根目录、服务端口,允许浏览目录,优化了大文件下载,提供详细的版本更新历史,包括错误修正、功能增强和性能提升。
摘要由CSDN通过智能技术生成
用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著)第八章.


3. 程序结构介绍

CHTTPServer对象
CHTTPServer对象代表了整个HTTP服务器在内存中的存在,负责创建完成端口模型,创建所需的线程,监控完成端口事件并且维持URL和服务器上的真实文件的对应关系.除了维护网络模块外,CHTTPServer对象还要根据接收到的客户端请求生成正确的服务器响应.它的角色和ASP.NET或者JSP编程中用到的预定义Server对象是类似的.

CHTTPReq
评论 87
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值