116709047陈俊松嵌入式Linux课程设计Word格式文档下载.docx
- 文档编号:22198287
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:13
- 大小:355.89KB
116709047陈俊松嵌入式Linux课程设计Word格式文档下载.docx
《116709047陈俊松嵌入式Linux课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《116709047陈俊松嵌入式Linux课程设计Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
30
设计报告质量
报告或成果完整、正确,概念清楚,图纸表格齐全,文字通顺,排版打印符合要求。
40
工作量
按期完成规定的任务,工作量饱满,难度较大。
10
成绩:
指导教师签字:
评定日期:
目录
设计的目的1
设计要求1
主要仪器设备(软硬件环境)1
设计内容1
4.1设计原理1
4.2总体方案设计3
4.3程序设计3
4.4程序的调试和运行结果7
总结8
参考文献9
1.设计的目的
通过课程设计进一步掌握嵌入式linux基本程序设计的能力。
掌握嵌入式linux程序的设计、运行和调试工作。
熟悉搭建嵌入式开发环境及交叉编译器。
掌握下载程序到目标板正确运行。
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)、简单邮件传输协议(SMTP)、域名系统服务(DNS)、网络新闻传输协议(NNTP)和超文本传输协议(HTTP)等很多高层协议。
本节将运用前面学到的知识编写一个简单功能的基于应用层HTTP协议的Web服务器。
客户端(浏览器)与Web服务器之间的交互主要包含客户的请求和服务器的应答。
请求和应答的格式在超文本传输协议(HTTP)中有定义。
HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议。
它可以使浏览器更加高效,使网络传输减少。
它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。
HTTP服务器则在该端口监听客户端发送过来的请求。
一旦收到请求,服务器(向客户端)发回一个状态行和响应的消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。
1)HTTP请求
HTTP请求信息格式如下所示:
HTTP请求消息:
=请求行实体头信息列表CRLF[实体内容]
请求行:
=方法 URL HTTP版本号 CRLF
方法:
=GET|HEAD|POST|扩展方法
URL:
=协议名称+宿主名+目录与文件名
实体头信息列表:
=实体头信息1CLRF实体头信息2CLRF……实体头信息nCLRF
实体头信息:
=头部字段名:
值
其中"
CRLF"
表示回车换行。
"
请求行"
中的"
方法"
描述了对指定资源执行的动作,常用的方法"
GET"
、"
HEAD"
和"
POST"
等3种
方法
描述
GET
从WEB服务器中获取对象,不同类型的对象将获取不同的信息,比如:
·
文件类型对象,获取该文件的内容。
可运行程序类型对象,获取该程序执行的结果。
数据库查询类型对象,获取该查询的结果。
HEAD
要求服务器查找对象的元信息。
POST
从客户端向WEB服务器发送数据。
2)HTTP应答
Web服务器处理客户请求,并向客户机发送应答报文,HTTP协议的应答报文格式为如下所示。
应答报文:
=状态行实体头信息列表CRLF[实体内容]
状态行
=HTTP版本号 状态码 原因叙述
值
状态码描述了Web服务器执行客户机请求的状态信息
状态码
含义
1XX
保留
2XX
成功接收,比如“200”表示处理成功。
3XX
客户需进一步细化请求。
4XX
客户错误,比如“404”表示访问的指定资源不存在。
5XX
服务器出错。
4.2总体方案设计
Web服务器实际上是一个目录服务器的扩展,通过HTTP协议读取服务器相关目录上的内容。
Web服务器通常需要具备3种用户操作:
列举目录信息、显示文件内容和运行应用程序。
Web服务器通过基于流的套接字连接,为客户提供上述3种操作。
用户连接到服务器后,用户陆续发送请求,服务器会处理每条客户的请求信息并返回应答信息。
从流程图可以看出,Web服务器和浏览器之间的通信流程为:
客户端(用户的浏览器)向Web服务器发送连接请求,服务器会接收该请求,建立一个套接字连接。
服务器端陆续读取客户端的请求,进行相应的处理并返回应答信息
客户端读取服务器端的应答信息,并将其按照各种格式显示在浏览器中(文本、图片、声音等内容)。
4.3程序设计
1)服务器代码:
#include<
netinet/in.h>
arpa/inet.h>
sys/stat.h>
sys/socket.h>
netdb.h>
error.h>
string.h>
stdio.h>
sys/types.h>
unistd.h>
fcntl.h>
pthread.h>
time.h>
constcharPATH[]="
/mnt/hgfs/shiyan"
;
//接收web浏览器请求
void*recvMsg(void*param)
{
intlen;
intfd2=*(int*)param;
//客户端的sockid
charbuf[1024];
charexname[100];
if(recv(fd2,buf,sizeof(buf),0)>
0)
{
len=strlen(buf);
printf("
浏览器请求内容为:
%s"
buf);
if(strstr(buf,"
Accept:
"
)!
=NULL)//获取浏览器发送的http请求中的内容类别
{
char*pp=strstr(buf,"
);
char*p1=strchr(pp,'
'
char*p2=strchr(pp,'
'
strncpy(exname,p1+1,p2-p1-1);
}
name:
exname);
//输出text/html或image/png
if(strncmp(buf,"
3)==0){
charwebname[100];
char*p1=strchr(buf,'
char*p2=strchr(p1+1,'
strncpy(webname,p1+1,p2-p1-1);
//获取浏览器请求的文件名
webname);
structstatst;
charfilename[1024]={'
\0'
};
strcpy(filename,PATH);
strcat(filename,webname);
stat(filename,&
st);
charprotol[2048]={'
charstrTime[200]={'
charcontent_type[100]={'
if(strncmp(webname,"
/sword.jpg"
10)==0)
{
strncpy(content_type,"
Content-Type:
image/jpeg\r\n"
\
strlen("
));
}
else
\
text/html\r\n"
strlen("
char*wday[]={"
Sun"
"
Mon"
Tue"
Wed"
Thu"
Fri"
Sat"
time_ttimep;
structtm*p;
time(&
timep);
p=gmtime(&
sprintf(strTime,"
%s,%d-%d-%d%d:
%d:
%d\n"
wday[p->
tm_wday],\
(1900+p->
tm_year),(1+p->
tm_mon),p->
tm_mday,p->
tm_hour,p->
tm_min,p->
tm_sec);
sprintf(protol,"
HTTP/1.1200OK\r\n"
Server:
Apache-Coyote/1.1\r\n"
ETag:
\"
W/8888-88\"
\r\n"
Last-Modified:
Thursday,2014-11-1212:
00:
00\r\n"
Content-Length:
%dbytes\r\n"
Date:
%s\r\n"
Connection:
keep-alive\r\n\r\n"
content_type,(int)st.st_size,strTime);
protol);
strTime);
send(fd2,protol,strlen(protol),0);
size_tlen=0;
charfbuf[1024]={'
constchar*filename2="
/mnt/hgfs/shiyan/abc.jpg"
intfd4=open(filename2,O_WRONLY|O_CREAT,0777);
intfd=open(filename,O_RDONLY,0777);
while((len=read(fd,fbuf,sizeof(fbuf)))>
send(fd2,fbuf,len,0);
write(fd4,fbuf,len);
close(fd);
close(fd2);
pthread_exit(NULL);
returnNULL;
}
intmain()
intfd;
structsockaddr_inserveraddr;
structsockaddr_inclientaddr;
memset(&
serveraddr,0,sizeof(serveraddr));
while((fd=socket(AF_INET,SOCK_STREAM,0))<
0){
printf("
socketfailed!
\n"
intreuser=1;
setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&
reuser,sizeof(reuser));
serveraddr.sin_family=AF_INET;
serveraddr.sin_port=htons(8080);
//端口号指定为:
8080
serveraddr.sin_addr.s_addr=inet_addr("
192.168.224.134"
//设定服务器IP
socklen_tlen=sizeof(serveraddr);
if(bind(fd,(conststructsockaddr*)&
serveraddr,len)<
binderror\n"
return0;
intret=listen(fd,5);
if(ret!
=0)
listenerror\n"
else
listening......\n"
while
(1)
socklen_tsize=sizeof(clientaddr);
intfd2=accept(fd,(structsockaddr*)&
clientaddr,&
size);
if(fd2==-1){
acceptfailed\n"
);
客户端地址:
%s\n"
inet_ntoa(clientaddr.sin_addr));
pthread_tid1;
pthread_create(&
id1,NULL,recvMsg,&
fd2);
4.4程序的调试和运行结果
调试编译:
运行结果:
5.总结
通过这次嵌入式linuxWeb服务器的设计,让我多linux的设计编程有了更深的了解。
特别别是对这次的Web服务器的设计有了很大的进步,通过测试,编写的程序都能顺利运行。
但由于时间紧迫,在很多地方还是做的不好,没能很深入的了解,所以我们课后要更加深入的去学习,自己动手时间多练习
参考文献
[1]刘银水,肖正宇,孙伟.基于ARM-Linux的嵌入式WEB服务器[J].单片机与嵌入式系统应用;
2007.06.
[2]杜宝祯,祝静,徐涢基,何鹏举.基于Linux和S3C2440的GPC控制器设计[J].单片机与嵌入式系统应用.2009.11.
[3]吴迅;
基于Linux的嵌入式WEB服务器的研究[D].山东师范大学;
2010.
[4]马长青.Linux环境下基于Web的图档管理系统的开发[D].山东农业大学;
2005.
[5]孙亚军.基于ARM的嵌入式Linux平台的研究与实现[D].东北大学.2009.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 116709047 陈俊松 嵌入式 Linux 课程设计