我需要在C中构建一个简单的HTTP服务器.任何指导?链接?样品?
我建议你看一下:编写客户端和服务器的实用指南
您必须在增量步骤中实现的是:
让您的基本TCP套接字层运行(侦听端口/端口,接受客户端连接并发送/接收数据).
实现缓冲读取器,以便您可以一次读取一行(由CRLF分隔)的请求.
阅读第一行.解析方法,请求版本和路径.
实现"Header:value"语法的头解析.不要忘记展开的折叠标题.
检查请求方法,内容类型和内容大小,以确定如何/是否将读取正文.
基于内容类型实现内容的解码.
如果您要支持HTTP 1.1,请执行"100 Continue",keep-alive,chunked transfer之类的操作.
添加健壮性/安全性措施,例如检测不完整的请求,限制最大数量的客户端等
收缩包装你的代码并开源它:)
我建议你看一下微小的httpd.如果你想从头开始编写,那么你需要彻底阅读RFC 2616.使用BSD套接字以非常低的级别访问网络.
HTTP服务器在概念上很简单:
打开端口80进行收听
联系时,收集一些信息(主要是 - 你现在可以忽略其余的)
将请求转换为文件请求
打开文件并将其吐回客户端
根据您希望支持多少HTTP,它会变得更加困难 - POST有点复杂,脚本,处理多个请求等等.
但基础非常简单.
Mongoose(以前简单的HTTP守护进程)非常好.特别是,它可以在Windows,Windows CE和UNIX下嵌入和编译.
在端口80上打开TCP套接字,开始侦听新连接,实现此功能.根据您的目的,您可以忽略几乎所有内容.最简单的方法是,您可以为每个请求发送相同的响应,这只需要将文本写入套接字.
看看nweb(Nigel的Web服务器),"一个只有200行C源代码的小型,安全的Web服务器":
https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing
http://www.ibm.com/developerworks/systems/library/es-nweb/
该文章包括伪代码,解释和注释.
编辑:IBM的链接已经死亡.我已将网页的PDF保存到Google云端硬盘.这是代码下载:
https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing
@ ankushagarwal做了一些修改,并在GitHub上传了他的版本:https: //github.com/ankushagarwal/nweb
我写了我自己的,你可以使用.这个工作有sqlite,是线程安全的并且在C++ for UNIX中.
您应该能够将其拆开并使用C兼容代码.
http://code.google.com/p/mountain-cms/
当我不得不做我的作业时,HTTP规范和Firebug对我非常有用.
祝你好运.:)