博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用C++实现HTTP服务器 - Windows平台(开放源代码) - Que's C++ Studio - 博客频道 - CSDN.NET...
阅读量:5956 次
发布时间:2019-06-19

本文共 1301 字,大约阅读时间需要 4 分钟。

分类:
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著)第八章.

转载地址:http://qzexx.baihongyu.com/

你可能感兴趣的文章
CodeForces 722C Destroying Array
查看>>
HTML 图片加载问题
查看>>
HTML
查看>>
Nginx配置详解
查看>>
python常见的数据结构
查看>>
powerDesigner
查看>>
黑马程序员—文件读取路径及行读取的方式,今晚总算有点小懂
查看>>
自己用的一套reset.css,打算整理一下方便以后用,持续更新中,各位大神,不喜勿喷...
查看>>
DBA_实践指南系列7_Oracle Erp R12监控OAM(案例)
查看>>
【HASH】【UVA 10125】 Sumset
查看>>
常用的Javascript设计模式
查看>>
[ACM] poj 2249 Binomial Showdown (排列组合公式优化)
查看>>
java9学习之模块化
查看>>
深入理解正则表达式
查看>>
C#_LINQ(LINQ to Entities)
查看>>
数据库主键与外键
查看>>
tidb 架构 ~Tidb学习系列(5)
查看>>
DOM
查看>>
Android ADB 常用命令
查看>>
通过jQuery.support看javascript中的兼容性问题
查看>>