基于linux系统嵌入式web服务器设计2

上传人:第*** 文档编号:61115575 上传时间:2018-11-24 格式:DOC 页数:27 大小:241KB
返回 下载 相关 举报
基于linux系统嵌入式web服务器设计2_第1页
第1页 / 共27页
基于linux系统嵌入式web服务器设计2_第2页
第2页 / 共27页
基于linux系统嵌入式web服务器设计2_第3页
第3页 / 共27页
基于linux系统嵌入式web服务器设计2_第4页
第4页 / 共27页
基于linux系统嵌入式web服务器设计2_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《基于linux系统嵌入式web服务器设计2》由会员分享,可在线阅读,更多相关《基于linux系统嵌入式web服务器设计2(27页珍藏版)》请在金锄头文库上搜索。

1、* 实践教学实践教学 * 兰州理工大学兰州理工大学 计算机与通信学院 2015 年春季学期 嵌入式系统开发课程设计嵌入式系统开发课程设计 题 目: 基于 LINUX 系统的嵌入式 WEB 服务器的设计 专业班级: 通信工程 12 级 1 班 姓 名: 王爱强 学 号: 12250110 指导教师: 张玺君 成 绩: 目录目录 摘 要1 前 言2 一、基本原理3 1.1 嵌入式 WEB 服务器概述.3 1.2 SOCKET 编程概述.4 二、系统分析6 2.1 整体结构图.6 2.2 连接处理模块.6 三、详细设计7 3.1 主程序设计.7 3.2 客户连接处理模块设计.8 3.3 客户请求解析

2、处理模块设计.8 3.4 发送 HTTP 协议数据头模块设计.9 四、运行结果11 参考文献14 总 结15 致 谢16 附录17 摘摘 要要 嵌入式 Web 服务器主要用于远程监测和控制,它不同于传统的 Web 服务器,硬件 处理器能力和储存能力有限,因此操作系统等相关软件需要进行裁剪以适应嵌入式环 境,开源代码的操作系统 Linu 型具有强大的网络服务功能,支持多种网络接口和网络 协议栈,同时具有成本低性能稳定,扩充能力强等特点,成为嵌入式操作系统的首选。 关键词: Linux ;Web 服务器; 浏览器;交叉编译 前前 言言 嵌入式系统已经成熟并且得到了广泛地使用。在传统的测控系统中,为

3、了实现多 个测控点之间的信息交流,一般采用 RS-485、CAN、SPI 等总线将多个测控节点组织成 一个网络,但是这样的网络专用性太强,有效地通信范围太窄,而基于 TCP/IP 协议的 Web 技术得到了普及,更重要的是这些协议是可开发的、标准的、独立于平台的。把嵌 入式系统和与 Web 技术结合在一起,将 Web 技术引入到测量和控制系统中,实现基于 嵌入式 Web 服务器的远程控制系统,必将有良好地应用前景。 嵌入式系统离不开嵌入式操作系统。目前商用的操作系统往往价格昂贵,不适应 广泛应用。嵌入式 Linux 操作系统源码可开发。移植性好,支持多种硬件平台并且支 持几乎所有的常见网络通信

4、协议支持的文件系统也很丰富,是一个功能完整的嵌入式 操作系统并且有大量的优秀开发码源的应用软件和开发工具可以使用。因此,采用 Linux 作为平台,使用 Web 技术进行远程在线测控系统的设计。 一、基本原理一、基本原理 1.1 嵌入式 WEB 服务器概述 1) WEB 服务器 通常是在远程机器上,负责对浏览器页面请求作出响应,返回 HTML 编码或 类似的数据流。通俗的讲,Web 服务器传送(serves)页面使浏览器可以浏览, 然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。 确切一点,你可以说:Web 服务器专门处理 HTTP 请求(request)

5、,但是应用程 序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。 随着 Internet 技术的兴起,在嵌入式设备的管理与交互中,基于 Web 方式 的应用成为目前的主流,这种程序结构也就是大家非常熟悉的 B/S 结构,即在 嵌入式设备上运行一个支持脚本或 CGI 功能的 Web 服务器,能够生成动态页面, 在用户端只需要通过 Web 浏览器就可以对嵌入式设备进行管理和监控,非常方 便实用。 2) WEB 浏览器 WEB 浏览器是个显示网页伺服器或档案系统内的 HTML 文件,并让用户与此 些文件互动的一种软件。个人电脑上常见的网页浏览器包括微软的

6、 Internet Explorer、Mozilla 的 Firefox、Opera 和 Safari。浏览器是最经常使用到的客 户端程序。 3)嵌入式 WEB 服务器架构 图 1 嵌入式 WEB 服务器架构 常见的嵌入式 WEB 服务器有 lighttpd、shttpd、thttpd、boa、mathopd、minihttpd、appweb、goahead 等 上百种。 1.2 SOCKET 编程概述 现在大多数的操作系统都提供了已编译好了的网络通讯程序。TCP/IP 范围 内最普通的例子就是 web 客户端(浏览器) 和 web 服务器,还有就是 FTP 和 Telnet 的客户端和服务器

7、等。 Socket 接口是 TCP/IP 网络的 API,Socket 接口定义了许多函数或例程, 程序员可以用它们来开发 TCP/IP 网络上的应用程序。 SOCKET 编程接口 #include int socket(int domain, int type, int protocol); 说明: socket()函数创建一个套接字 参数:domain: 应用程序所在主机使用的通信协议族 type: 建立的套接字的类型 Protocol:使用的特定协议 #include int bind(int sockfd, struct sockaddr *my_addr, socklen_t add

8、rlen); 说明:将套接字地址与所创建的套接字号联系起来 参数:sockfd :调用 socket 返回的文件描述符 my_addr :指向数据结构 struct sockaddr 的指针,它保存地址(即 端 口和 IP 地址)信息 addrlen :设置为 sizeof(struct sockaddr) #include int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen); 说明:建立套接字连接 ,成功返回 0 ,失败返回-1 参数:sockfd :调用 socket 返回的文件描述符 s

9、erv_addr:保存着目的地端口和 IP 地址的数据结构 struct sockaddr addrlen:设置为 sizeof(struct sockaddr) #include int listen(int s, int backlog); 说明:用于面向连接服务器,表明它愿意接收连接 参数:sockfd :调用 socket 返回的文件描述符 backlog:在进入队列中允许的连接数目,在发生错误的时候返回-1 #include int accept(int s, struct sockaddr *addr, socklen_t *addrlen); 说明:建立套接字连接,成功返回文件描

10、述符,失败-1 参数:sockfd :调用 socket 返回的文件描述符 addr :指向局部的数据结构 sockaddr_in 的指针 addrlen:设置为 sizeof(struct sockaddr_in) #include #include ssize_t send(int s, const void *buf, size_t len, int flags); 说明:用于流式套接字或者数据报套接字的通讯,返回实际发送的数据的字 节数,它在 错误的时候返回-1 参数:sockfd:发送数据的套接字描述符(或者是调用 socket()或者 accept() msg:指向发送数据的指针

11、len:数据长度 flags:总是设置为 0 #include #include ssize_t recv(int s, void *buf, size_t len, int flags); 说明:用于流式套接字的通讯,recv()返回实际读入缓冲 的数据的字节数。 或者在错误的时候返回-1 参数:sockfd:要读的 SOCKET 描述符 buf:要读的信息的缓冲区 len:缓冲的最大长度 flags:总是设置为 0 二、二、系统分析系统分析 2.1 整体结构图 主程序:建立 TCP 类型 SOCKET 在 80 端口进行监听连接请求。接收到连接 请求,将请求传送给连接处理模块处理。并继续进

12、行监听。如图 2 所示: 主程序MAIN 1、环境设置 2、建立侦听SOCKET及客户连接处 理调用主循环 客户连接处理 解析客户请求HTTP协议头 发送HTTP协议数据头 发送GIF文件 发送文本文件 发送JPG文件 发送HTML文件 发送当前目录信息 图 2 整体流程 2.2 连接处理模块 客户请求获取服 务器资源 解析客户请求字 符串 发送HTTP协议头 发送资源数据 侦听客户请求 客户计算机 读取客户请求资 源 图 3 连接处理模块 三、详细设计三、详细设计 3.1 主程序设计 1)功能说明 系统的总入口,也是系统的主要控制函数。分别完成如下功能: 建立环境设置。 设置信号处理方式。

13、建立侦听 TCP 流方式 SOCKET 并绑定 80 端口。 建立连接侦听及客户连接处理调用主循环。 2)算法流程图 算法流程图如图 4 所示: 设置信号处理 句柄 进入根目录 命令行处理 建立TCP流SOCKET 绑定监听端口 设置允许客户 连接数量 侦听客户连接 请求 客户连接请求 处理 图 4 算法流程图 3)命令行输入处理 用户在命令行输入参数 -i ,则将客户输入文件描述字设为 0,即标准输入。 用于在本机进行测试。其他输入全部忽略。 3.2 客户连接处理模块设计 1)功能说明 用于初步处理客户的连接请求,并将请求信息传递给客户请求解析函数处理。 2)算法 具体算法如图 5 所示:

14、打开文件描述字, 并建立文件描述符 读取连接信息 获取Refferer字段信息 赋值给Refferer全局变量 获取content_length字段信息 调用客户请求 解析模块 关闭文件流 图 5 算法流程图 3.3 客户请求解析处理模块设计 1)功能说明 用于解析客户的请求,并根据请求信息调用相应的函数进行请求处理。 2)算法 算法流程图如图 6 所示: 对客户的请求字符 串进行空格处理 发送当前目录 的INDEX.HTML文件 请求目录下 的index.html是否存在? 发送当前目录 信息 是否请求目录? 是 是JPG或JPEG 文件 判断客户请求 文件类型 否 是GIF图像文件 是HT

15、ML文件 是纯文本文件 发送协议头: Content-type: image/jpeg 请求资源是否存 在? 是 回应请求资源 不存在。 否 发送协议头: Content-type: image/gif 发送协议头: Content-type: text/html 发送协议头: Content-type: text/plain 发送文件数据 是 否 图 6 算法流程图 3.4 发送 HTTP 协议数据头模块设计 1)功能说明 根据参数的不同,发送不同的 HTTP 协议头信息。 2)算法 函数定义为:int PrintHeader(FILE *f, int content_type) 发送请求成

16、功信息:HTTP/1.0 200 OK。 根据文档类型发送相应的信息:fprintf(),函数中的第一个参数 f 为客户连接文件 流句柄。 switch (content_type) case t: fprintf(f,“Content-type: text/plainn“); break; case g: fprintf(f,“Content-type: image/gifn“); break; case j: fprintf(f,“Content-type: image/jpegn“); break; case h: fprintf(f,“Content-type: text/htmln“); break; 发送服务器信息: fprintf(f,“Server: AMR

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号