版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 福建农林大学金山学院电子信息类课程设计课程名称:嵌入式linux应用开发课程设计设计题目:嵌入式linux Web服务器的设计姓 名:陈俊松系:信息与机电工程系专 业:电子信息工程年 级:2011级学 号:116709047指导教师:朱仕浪职 称:讲师2014年 11 月 24 日 福建农林大学金山学院电子信息类课程设计结果评定评价内容评价指标评分权值评定成绩工作态度工作努力,严格按照课程技能训练设计的要求去做,表现好;遵守纪律,工作作风严谨务实。20业务水平能按时优异地完成课程设计任务,能熟练地综合运用所学理论和专业知识,在技能训练中对某些技能、技术有新建议、有小革新、有创见。动手能力强,
2、实干精神强,团结协作能力强,适应能力强。30设计报告质量报告或成果完整、正确,概念清楚,图纸表格齐全,文字通顺,排版打印符合要求。40工作量按期完成规定的任务,工作量饱满,难度较大。10成绩:指导教师签字:评定日期:目 录设计的目的1设计要求1主要仪器设备(软硬件环境)1设计内容14.1 设计原理14.2总体方案设计34.3 程序设计34.4 程序的调试和运行结果7总结8参考文献9嵌入式linux Web服务器的设计1. 设计的目的通过课程设计进一步掌握嵌入式linux基本程序设计的能力。掌握嵌入式linux程序的设计、运行和调试工作。熟悉搭建嵌入式开发环境及交叉编译器。掌握下载程序到目标板正
3、确运行。2. 设计要求熟练应用socket()、bind()、accept()、connect()、send()、recv()等函数,编写网络通信程序,编写makefile文件,通过make工程管理器交叉编译程序,实现宿主PC机使用浏览器访问PXA270-EP目标板的WEB服务器。3. 主要仪器设备(软硬件环境)本课程设计硬件:普通的PC机,PXA270-EP嵌入式实验箱。软件:Redhat9 并配置好ARMlinux开发环境。4. 设计内容4.1 设计原理Internet的基本协议是TCP/IP协议,然而在TCP/IP模型最上层的是应用层。它包含文件传输协议(FTP)、简单邮件传输协议(SM
4、TP)、域名系统服务(DNS)、网络新闻传输协议(NNTP)和超文本传输协议(HTTP)等很多高层协议。本节将运用前面学到的知识编写一个简单功能的基于应用层HTTP协议的Web服务器。客户端(浏览器)与Web服务器之间的交互主要包含客户的请求和服务器的应答。请求和应答的格式在超文本传输协议(HTTP)中有定义。HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是
5、80端口)的TCP连接。HTTP服务器则在该端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行和响应的消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。1) HTTP请求HTTP请求信息格式如下所示:HTTP请求消息 := 请求行 实体头信息列表 CRLF 实体内容请求行 := 方法URLHTTP版本号CRLF 方法 := GET|HEAD|POST|扩展方法URL := 协议名称 宿主名 目录与文件名实体头信息列表 := 实体头信息1 CLRF 实体头信息2 CLRF 实体头信息n CLRF实体头信息 := 头部字段名:值 其中"CRLF&q
6、uot;表示回车换行。"请求行"中的"方法"描述了对指定资源执行的动作,常用的方法"GET"、"HEAD"和"POST"等3种 方法描述GET从WEB服务器中获取对象,不同类型的对象将获取不同的信息,比如:· 文件类型对象,获取该文件的内容。· 可运行程序类型对象,获取该程序执行的结果。· 数据库查询类型对象,获取该查询的结果。HEAD要求服务器查找对象的元信息。POST从客户端向WEB服务器发送数据。2)HTTP应答Web服务器处理客
7、户请求,并向客户机发送应答报文,HTTP协议的应答报文格式为如下所示。应答报文 := 状态行 实体头信息列表 CRLF 实体内容状态行 = HTTP版本号状态码原因叙述实体头信息列表 := 实体头信息1 CLRF 实体头信息2 CLRF 实体头信息n CLRF实体头信息 := 头部字段名:值状态码描述了Web服务器执行客户机请求的状态信息 状态码含义1XX保留2XX成功接收,比如“200”表示处理成功。3XX客户需进一步细化请求。4XX客户错误,比如“404”表示访问的指定资源不存在。5XX服务器出错。4.2总体方案设计Web服务器实际上是一个目录服务器的扩展,通过HT
8、TP协议读取服务器相关目录上的内容。Web服务器通常需要具备3种用户操作:列举目录信息、显示文件内容和运行应用程序。Web服务器通过基于流的套接字连接,为客户提供上述3种操作。用户连接到服务器后,用户陆续发送请求,服务器会处理每条客户的请求信息并返回应答信息 。从流程图可以看出,Web服务器和浏览器之间的通信流程为:客户端(用户的浏览器)向Web服务器发送连接请求,服务器会接收该请求,建立一个套接字连接。服务器端陆续读取客户端的请求,进行相应的处理并返回应答信息客户端读取服务器端的应答信息,并将其按照各种格式显示在浏览器中(文本、图片、声音等内容)。4.3 程序设计1)服务器代码:#inclu
9、de <netinet/in.h>#include <arpa/inet.h>#include <sys/stat.h>#include <sys/socket.h>#include <netdb.h>#include <error.h>#include <string.h>#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <fcntl.h>#include <pthrea
10、d.h>#include <time.h> const char PATH="/mnt/hgfs/shiyan" /接收web浏览器请求void *recvMsg(void *param) int len;int fd2 = *(int*) param; /客户端的sockidchar buf1024;char exname100;if(recv(fd2, buf, sizeof(buf), 0)>0) len=strlen(buf); printf("浏览器请求内容为:%s", buf);if(strstr(buf,"
11、Accept: ")!=NULL) /获取浏览器发送的http请求中的内容类别char *pp=strstr(buf,"Accept: ");char *p1=strchr(pp,' ');char *p2=strchr(pp,',');strncpy(exname,p1+1,p2-p1-1); printf("name:%s", exname); /输出text/html或image/png if (strncmp(buf, "GET",3) = 0) char webname100; ch
12、ar *p1=strchr(buf,' '); char *p2=strchr(p1+1,' '); strncpy(webname,p1+1,p2-p1-1); /获取浏览器请求的文件名 printf("%s", webname); struct stat st; char filename1024='0' strcpy(filename,PATH); strcat(filename,webname); stat(filename,&st); char protol2048='0' char strT
13、ime200='0' char content_type100='0' if(strncmp(webname,"/sword.jpg",10)=0) strncpy(content_type,"Content-Type: image/jpegrn", strlen("Content-Type: image/jpegrn"); else strncpy(content_type,"Content-Type: text/htmlrn",strlen("Content-Type:
14、 text/htmlrn"); char *wday = "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" time_t timep; struct tm *p; time(&timep); p = gmtime(&timep); sprintf(strTime,"%s,%d-%d-%d %d:%d:%dn", wdayp->tm_wday, (1900+p-
15、>tm_year),(1+p->tm_mon),p->tm_mday,p->tm_hour, p->tm_min, p->tm_sec); sprintf(protol,"HTTP/1.1 200 OKrn" "Server: Apache-Coyote/1.1rn" "ETag: "W/8888-8888888888888"rn" "Last-Modified: Thursday, 2014-11-12 12:00:00 rn" "%s"
16、 "Content-Length: %d bytesrn" "Date: %s rn" "Connection:keep-alivernrn",content_type,(int)st.st_size, strTime); printf("%s", protol); printf("%s", strTime); send(fd2,protol,strlen(protol),0); size_t len=0; char fbuf1024='0' const char*filenam
17、e2="/mnt/hgfs/shiyan/abc.jpg" int fd4=open(filename2,O_WRONLY|O_CREAT,0777); int fd=open(filename,O_RDONLY,0777); while(len=read(fd,fbuf,sizeof(fbuf)>0) send(fd2,fbuf,len,0); write(fd4,fbuf,len); close(fd); close(fd2); pthread_exit(NULL); return NULL;int main() int fd; struct sockaddr_i
18、n serveraddr; struct sockaddr_in clientaddr; memset(&serveraddr, 0, sizeof(serveraddr); while (fd = socket(AF_INET, SOCK_STREAM, 0) < 0) printf( "socket failed!n"); int reuser=1; setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&reuser,sizeof(reuser); serveraddr.sin_family = AF_INET; serve
19、raddr.sin_port = htons(8080); /端口号指定为:8080serveraddr.sin_addr.s_addr = inet_addr("34"); /设定服务器IP socklen_t len = sizeof(serveraddr); if (bind(fd, (const struct sockaddr*)&serveraddr, len)< 0) printf("bind errorn"); return 0; int ret = listen(fd, 5); if (ret != 0) printf("listen errorn"); return 0; else printf("listening.n"); while(1) socklen_t size=sizeof(clientaddr); int fd2 = accept(fd,(struct sockaddr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电商销售发货操作技术指引
- 慢病风险量化评估流程
- 会员转介绍激励管理规范
- 西兰花花球发育期管理标准
- 中医基础理论考试试卷及详解
- 农产品质量安全追溯体系方案
- 果品采后气调库储藏管理技术规程
- 多人中毒事故现场救援处置
- 专用杀菌剂安全使用规范指南
- 婴幼儿良好睡眠习惯培养指引
- 太阳能热水器自动控制系统毕业设计
- 电力电子技术第二版张兴课后习题答案
- 人们通过竞争才会取得更大的成功
- LY/T 2103-2013根径立木材积表编制技术规程
- GB/T 9445-2015无损检测人员资格鉴定与认证
- 第五章 井间地震
- 国际商务谈判课件(同名951)
- 高二期中考试后家长会课件
- 2023年新教科版科学六年级下册学生活动手册答案
- 中枢神经系统淋巴瘤的诊断和治疗 课件
- 答辩前针对硕士学位论文评阅意见的修改说明
评论
0/150
提交评论