文档介绍:实验五 简单嵌入式WEB服务器实验 1
、 实验目的 1
、 实验内容 1
、 预备知识 1
、 实验设备及工具 2
、 实验原理 2
、 程序分析 8
、 实验步骤 12
:参数 1:文件流 FILE 结构指针,用于表示客户连接的文件流指针。
参数 2:字符串指针,待解析的字符串。
11、 发送HTTP协议数据头
函数名: int PrintHeader(FILE *f, int content_type)
参数:参数1:文件流FILE结构指针,用于表示客户连接的文件流指针。用于写入HTTP协 议数据头信息。
参数2:信息类型,用于确定发送的HTTP协议数据头信息。
12、 发送当前目录文件列表信息
函数名: int DoDir(FILE *f, char *name)
参数:参数1:文件流FILE结构指针,用于表示客户连接的文件流指针。用于写入目录文 件信息数据。
参数 2:目录名,表示客户请求的目录信息。
13、 发送 HTML 文件内容
函数名: int DoHTML(FILE *f, char *name)
参数:参数1:文件流FILE结构指针,用于表示客户连接的文件流指针。用于写入文件信 息数据。
参数 2:客户请求的文件名。
14、 发送纯文本(TXT)文件内容
函数名: int DoText(FILE *f, char *name)
参数:参数1:文件流FILE结构指针,用于表示客户连接的文件流指针。用于写入文件信 息数据。
参数 2:客户请求的文件名。
15、发送 JPEG 图像文件内容
函数名:int DoJpeg(FILE *f, char *name)
参数:参数1:文件流FILE结构指针,用于表示客户连接的文件流指针。用于写入文件信 息数据。
参数 2:客户请求的文件名。
16、发送GIF图像文件内容
函数名: int DoGif(FILE *f, char *name)
参数:参数1:文件流FILE结构指针,用于表示客户连接的文件流指针。用于写入文件信 息数据。
参数 2:客户请求的文件名。
、程序分析
1、主程序设计
功能说明
系统的总入口,也是系统的主要控制函数。分别完成如下功能:
♦建立环境设置。
♦设置信号处理方式。
建立侦听TCP流方式SOCKET并绑定80端口。
建立连接侦听及客户连接处理调用主循环。
算法流程图
所示:
设置信号处理
句柄
进入根目录
命令行处理
\|/
建立TCP流SOCKET
绑定监听端口
设连接许客户
侦听客户连接
客户连扌理请求
图 算法流程图
3)命令行输入处理
用户在命令行输入参数 -i ,则将客户输入文件描述字设为 0,即标准输入。用于在本机进 行测试。其他输入全部忽略。
2、客户连接处理模块设计
1)功能说明
用于初步处理客户的连接请求,并将请求信息传递给客户请求解析函数处理。
2)算法
所示:
并建立文件描述符'
读取连接信息
Refferer
获取Refferer字段信息
赋值给Refferer全局变量
获取content_length字段信息
关闭文件流
调解客模请求
图 算法流程图
3、客户请求解析处理模块设计
1)功能说明
用于解析客户的请求,并根据请求信息调用相应的函数进行请求处理
2)算法
算法流程图如图 所示:
[是]
对进H处符
、在求资源是否存丄…、.回应请求资源:
是否请求目录[是]
的盘!严htm是否存在口 I发送当前目录
判断客类请求
发送当前目录
Content-ty pe: imageipeg
是GIF图像文件
_► 是1TML文件
Content-type: ima/gif
发送协议头 Content—ty pe: teXtitml
是纯文本文件^ 发送协议头 匕__
. Content-type: teXplain ..
发送文件数据*
\/
图 算法流程图
4、发送HTTP协议数据头模块设计
1)功能说明
根据参数的不同,发送不同的HTTP协议头信息。
2)算法
函数定义为:int PrintHeader(FILE *f, int content_type)
◊ 发送请求成功信息:HTTP/ 200 OK。
◊根据文档类型发送相应的信息:
fprintf(),函数中的第