版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式Web服务器设计与实现摘要:基于ARM10平台的嵌入式Linux,研究了嵌入式Web服务器的设计,并成功实现了对嵌入式Web服务器的远程访问。关键词:嵌入式Linux;ARM;Web服务器;线程0引言嵌入式系统是21世纪具有广阔发展前景的技术方向之一,自20世纪70年代初出现嵌入式系统的概念以来,嵌入式系统以其高性能、低功耗等特点获得了高速的发展。在20世纪末、21世纪初,嵌入式技术又与网络技术广泛结合,拓展出许多新的应用领域。本文讲述了基于ARM10平台的嵌入式Web服务器的设计及其实现。硬件的主要组成:PXA270RP实验平台。本系统开发板中的操作系统采用嵌入式Linux,其具有优异
2、、可移植性强、稳定性高的网络功能,采用版本的内核。HTTP协议HTTP/1.0和HTTP/1.1都把TCP作为底层的传输协议。HTTP客户首先发起建立与服务器TCP的连接。一旦建立连接,浏览器进程和服务器进程就可以对Socket进行通信,客户往自己的Socket发送HTTP请求消息,从自己的Socket接收HTTP响应消息;类似地,服务器从自己的Socket接收HTTP请求消息,往自己的Socket发送HTTP响应消息。HTTP规范1.0RPcl945和1.1RFC2616定义了HTTP消息的格式。HTTP消息分为请求消息和响应消息两类,格式如下:HTTP请求消息GET/index.htmlH
3、TTP/1.1Host:closeUseragent:Mozilla/5.0Acceptlanguage:zhcn(额外的回车符和换行符)HTTP响应消息HTTP/1.1200OKDate:Tue,25Dec201200:45:45GMTServer:BWS/1.0Connection:closeContentLength:9888ContentType:text/html;charset=gbk(数据数据数据数据数据)实现流程嵌入式Web服务器的实现流程如图1所示。一个简单的嵌入式Web服务器的功能是接收Client发送的请求并响应,并根据Client的请求向Client传送所需内容。获取S
4、erver当前目录文件列表:将Server当前目录下所有文件的信息发送给Client,信息包括:文件名、日期、大小;获取指定文件:将Client请求的文件发送给Client;获取HTML类型文件:将Client请求的HTML类型文件发送给Client;获取纯文本文件:将Client请求的纯文本发送给Client;获取JPG图像文件:将Client请求的JPG图像文件发送给Client;获取GIF图像文件:将Client请求的GIF图像文件发送给Client;解析Client请求:分析Client的请求,将请求信息解析为几个变量,如:请求的命令、文件名、文件类型。主要代码intPrintHead
5、er(FILE*f,intcontent_type)/发送HTTP协议数据头fprintf(f,HTTP/1.0200OKn);服务器回应http协议数据头的状态行;发送请求成功;switch(content_type)8caset:fprintf(f,Content-type:text/plainn);break;/发送纯文本文件信息;11caseg:fprintf(f,Content-type:image/gifn);break;/发送gif格式图片信息;14casej:fprintf(f,Content-type:image/jpegn);break;发送gpeg格式图片信息;17cas
6、eh:fprintf(f,Content-type:text/htmln);break;/发送html信息;fprintf(f,Server:embedded-httpd0.1n);/发送服务器版本信息;fprintf(f,Expires:0n);/发送文件永不过期信息;fprintf(f,n);return(0);26intDoJpeg(FILE*f,char*name)/对jpeg格式的文件进行处理;char*buf;FILE*infile;intcount;34if(!(infile=fopen(name,r)/通过文件名打开一个文件,只读属性;36fprintf(stderr,Unab
7、letoopenJPEGfile%s,%dn,name,errno);37fflush(f);return-1;4042PrintHeader(f,j);/发送j类型的http协议数据头信息;45copy(infile,f);/*printsthepage*/48fclose(infile);return0;5254intDoGif()、DoDir()、DoHTML()、DoText()类似DoJpeg()intParseReq(FILE*f,char*r)char*bp;structstatstbuf;char*arg;char*c;inte;intraw;174while(*(+r)!=)
8、;/*skipnon-whitespace*/判断buf中的内容是否为空跳过非空白;175while(isspace(*r)r+;/判断r所在位置的字符是否为空格,若为空格则r指向下一个字符;178while(*r=/)r+;/判断r所在位置的字符是否为/若为空格则r指向下一个字符;180bp=r;/将r所指向的内容赋值给bpbp指向/之后的内容;img/baidu_sylogo1.gifHTTP/1.1rn182while(*r&(*(r)!=)&(*(r)!=?)r+;/当r不为空,并求r不为?时r指向下一个字符189if(*r=?)/判断r是否为?若为?则执行以下语句;191char*e
9、;*r=0;arg=r+1;194if(e=strchr(arg,)*e=O;/如果arg为空则将arg所在位置置为0复制给e;198else/如果当前r指向字符不为?,将r指向字符置为O,2OOarg=O;*r=O;2O22O4c=bp;207if(c0=0 x20)c0=.;c1=O;/判断c中的字符内容是否为空格;若为空格212if(c0=0)strca(tc,.);/若c中为0则将.链接在c后214if(c&!stat(c,&stbuf)/通过文件名c获取文件信息,并保存在stbuf中if(S_ISDIR(stbuf.st_mode)/判断结果是否为特定的值char*end=c+str
10、len(c);/end指向c的末尾;strcat(c,/index.html);将/index.html加到c后,后面追加0;if(!stat(c,&stbuf)/通过文件名c获取文件信息,并保存在stbuf中;成功返回0DoHTML(f,c);/对html文件进行处理;225else*end=0;DoDir(f,c);/若c中没有/index.html则跳到目录处理代码处执行231elseif(!strcmp(r-4,.gif)/判断r中的后四个字符,即判断文件类型;DoGif(f,c);/若是gif格式的文件则跳转到DoGif对其进行处理;elseif(!strcmp(r-4,.jpg)|
11、!strcmp(r-5,.jpeg)DoJpeg(f,c);/若是jpg或jpeg格式的文件则跳转到DoJpeg对其进行处理elseif(!strcmp(r-4,.htm)|!strcmp(r-5,.html)DoHTML(f,c);若是htm格式的文件则跳转到DoHTML处对其进行处理elseDoTex(f,c);/若是纯文本格式的文件则跳转到DoText对其进行处理240else242PrintHeader(f,h);/发送h类型的http协议数据头fprintf(f,n);/打印出错信息fprintf(f,TherequestedURLwasnotfoundonthisservern);
12、247return0;249intHandleConnect(intfd)FILE*f;charbuf160;charbuf1160;264f=fdopen(fd,a+);/以文件描述符的形式打开文件;a+以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。272setbuf(f,0);/将关闭缓冲区;if(!fgets(buf,150,f)/直接通过f读取150个字符放入以buf为起始地址中,不成功时返回0则打印出错信息;否则fgets成功返回函数指针打印buf的内容;fprintf(stderr,httpd:Erro
13、rreadingconnection,error%dn,errno);fclose(f);return0;281288referrer0=0;content_length=-1;293while(fgets(buf1,150,f)&(strlen(buf1)2)/直接通过f读取150个字符放入以buf1为起始地址的空间中;if(!strncasecmp(buf1,Referer:,8)/将buf1中的前八个字符与字符串Referer:若相等则将将指针指向bufl中的Referer:之后;char*c=buf1+8;while(isspace(*c)c+;/判断c处是否为空格若为空格则c指向下一
14、个字符;strcpy(referrer,c);/将c所指的内存单元的内容复制到referrer数组中;elseif(!strncasecmp(buf1,Referrer:,9)/将bufl中的前九个字符与字符串Referrer:若相等则将将指针指向bufl中的Referrer:之后;305char*c=buf1+8;char*c=buf1+9;307while(isspace(*c)c+;/判断c处是否为空格若为空格则c指向下一个字符;309strcpy(referrer,c);/将c所指的内存单元的内容复制到referrer数组中;310elseif(!strncasecmp(buf1,Co
15、ntent-length:,15)将bufl中的前15个字符与字符串Content-length:若相等则将将指针指向bufl中的Content-length:之后;content_length=atoi(buf1+15);/atoi类型转换将buf1中的内容转换为整型赋值给content_length;324ParseReq(f,buf);/解析客户请求函数;327fflush(f);fclose(f);return1;331335void*key(void*data)从键盘输入一个字符,若输入q则退出程序;intmain(intargc,char*argv)intfd,s;intlen;v
16、olatileinttrue=1;354structsockaddr_inec,server_sockadd;r/定义结构体变量;357pthread_tth_key;void*retval;chroot(HTTPD_DOCUMENT_ROOT);/改变根目录;在makefile文件中指定;printf(startinghttpd.n);/打印启用服务器程序信息;printf(pressqtoquit.n);370if(argc1&!strcmp(argv1,-i)/若argv1等于-istrcmp返回0并且argc大于1执行if下的语句快即关闭文件描述符;372fclose(stderr);
17、HandleConnect(0);/向HandleConnect函数传入0文件描述符即标准输入;exit(0);server_sockaddr.sin_family=AF_INET;server_sockaddr.sin_port=hton(sSERVER_PORT);=hto(nlINADDR_ANY);392if(bind(s,(structsockaddr*)&server_sockaddr,sizeof(server_sockaddr)=-1)395perror(Unabletobindsocket);exit(1);397399if(listen(s,8*3)=-1)perror(U
18、nabletolisten);exit(4);405pthread_creat(e&th_key,NULL,key,0);/创建线程;printf(waitforconnection.n);while(1)len=sizeof(ec);411if(fd=accept(s,(void*)&ec,&len)=-1)/接受客户机的请求,与客户机建立链接;412exit(5);close(s);415HandleConnec(tfd);/处理链接函数调用fd为客户连接文件描述符;417418pthread_join(th_key,&retval);/以阻塞的方式等待thread指定的线程结束。当函数返回时,被等待线程的资源被收回。如果进程已经结束,那么该函数会立即返回。成功返回0;该语句不会执行到;420嵌入式Web服务器的程序算法流程如图2所示。4测试打开Web浏览器,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年武汉海事职业学院高职单招职业适应性测试参考题库带答案解析
- 2026年天府新区航空旅游职业学院单招职业技能笔试备考题库带答案解析
- 2026年山东科技职业学院单招职业技能笔试模拟试题带答案解析
- 2026年飞轮储能电网调频项目营销方案
- 2026年南昌健康职业技术学院高职单招职业适应性测试备考试题带答案解析
- 2026年新疆应用职业技术学院高职单招职业适应性测试备考题库带答案解析
- 2026年智能安全锤项目投资计划书
- 2026年智能电网设备与能源管理系统项目评估报告
- 2026年无线投屏器项目项目建议书
- 2026年廊坊卫生职业学院高职单招职业适应性测试备考试题带答案解析
- 海水淡化PX能量回收装置维护说明书
- 历年天津理工大学高数期末考试试卷及答案
- 妇产科学(第9版)第二章女性生殖系统解剖
- 中医经络之-特定穴课件
- GB/T 9122-2000翻边环板式松套钢制管法兰
- GB/T 16895.6-2014低压电气装置第5-52部分:电气设备的选择和安装布线系统
- 金融支付清算系统术语大全(中英文对照)
- 江苏省学业水平合格性考试复习课件:中外历史纲要上册主要考点线索梳理
- 煤矿岗位安全风险辨识评估
- 小提琴协奏曲《梁祝》音乐欣赏(33)课件
- PET瓶口标准尺寸表
评论
0/150
提交评论