http服务器的设计与实现.doc

上传人:scccc 文档编号:11934863 上传时间:2021-11-05 格式:DOC 页数:17 大小:183KB
返回 下载 相关 举报
http服务器的设计与实现.doc_第1页
第1页 / 共17页
http服务器的设计与实现.doc_第2页
第2页 / 共17页
http服务器的设计与实现.doc_第3页
第3页 / 共17页
http服务器的设计与实现.doc_第4页
第4页 / 共17页
http服务器的设计与实现.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《http服务器的设计与实现.doc》由会员分享,可在线阅读,更多相关《http服务器的设计与实现.doc(17页珍藏版)》请在三一文库上搜索。

1、笑嘻嘻小本科毕业论文(设计)网络课程设计实验报告题目:HTTP服务器的设计及实现姓名:孙宇飞、庄好涛、王斌学院:信息科学技术学院专业:计算机科学与技术班级:计科82班学号:亠指导老师:叶锡君职称:副教授2011年9月11日南京农业大学教务处制目录目录1.设计任务及要求错误!未指定书签。1.1设计目的错误!未指定书签。1.2设计要求错误!未指定书签。2.工作原理及设计方案错误!未指定书签。2.1工作原理 错误!未指定书签。2.2设计方案 错误!未指定书签。2.3开发环境 错误!未指定书签。2.4程序流程图 错误!未指定书签。2.5核心代码 错误!未指定书签。2.4.1主程序 错误!未指定书签。2

2、.4.2请求处理函数 错误!未指定书签。2.4.3无法响应请求 错误!未指定书签。2.4.4404响应 错误!未指定书签。2.4.5判断是否是目录 错误!未指定书签。2.4.6判断文件是否存在 错误!未指定书签。2.4.8判断文件类型 错误!未指定书签。2.4.9执行CGI程序 错误!未指定书签。2.4.10判断请求的是否是cgi程序 错误!未指定书签。页脚内容163.实验验证错误!未指定书签。3.1实验设备及材料 错误!未指定书签。3.2实验步骤错误!未指定书签。3.3实验截图错误!未指定书签。3.4实验结果错误!未指定书签。4.思考和总结错误!未指定书签。1. 设计任务及要求1.1设计目的

3、运用数据通信及网络课程所学的知识,设计一个简单的http服务器,在实现的过程中继续深入了解网络通信的原理,锻炼UNIX环境下网络编程的能力,熟悉socket编程原理和http协议, 从而巩固所学网络知识。1.2设计要求1)要能实现get方法;2)能响应请求的html页面;3)还能够响应请求的jpg的等图片文件;4)能响应请求的目录的信息,并以列表显示;2. 工作原理及设计方案2.1工作原理HTTP协议工作流程:1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP勺工作就开始了。2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL、 协议版本号,

4、后边是MIME信息:包括请求修饰符、客户机信息和可能的内容。3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本 号、一个成功或错误的代码,后边是 MIMEB息包括服务器信息、实体信息和可能的内容。4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客http工作流程图户机与服务器断开连接。2.2设计方案协议版本号:使用HTTP1.0请求方法:仅实现get方法响应文件的类型:text/pla in,image/gif,image/jpg,image/jpeg工作模式:多进程模式,每个进程单独处理一个请求2.3开发环境VmwareWorkstati

5、on6.5虚拟机下FreeBSD环境,用C语言进行开发,开发工具包括: vim,gcc,gdb。2.4程序流程图exit(2);响应请求的文1 r/*主循环*/while(1)/ 接收 socketfd=accept(sock,NULL,NULL);fpi n=fdope n( fd,r);/读取请求fgets(request,BUFSIZ,fpi n);prin tf(gotacall:request=%s,request);read_til_crnl(fpi n);/处理请求process_rq(request,fd);/ 关闭 socketfclose(fpi n);return。;24

6、2请求处理函数intprocess_rq(char*rq,intfd)/力卩void会报警告不知道为什么charcmdBUFSIZ,argBUFSIZ;/*创建一个新进程,如果不是子进程则直接返回*/if(fork()!=0) return-1;strcpy(arg,./); 加上./ 前缀if(ssca nf(rq,%s%s,cmd,arg+2)!=2)return-1;if(strcmp(cmd,GET)!=O)canno t_do(fd);elseif( no t_exist(arg)do_404(arg,fd);elseif(isadir(arg)do_ls(arg,fd);elsei

7、f(e nds_in_cgi(arg)do_exec(arg,fd);elsedo_cat(arg,fd);return。;/*endoffunctionprocess_rq*/243无法响应请求in tca nno t_do(i ntfd)FILE*fp=fdope n(fd,w);fprin tf(fp,HTTP/1.0501Notlmpleme ntedrn);fprin tf(fp,C onten t-type:text/plai nrn);fprin tf(fp,rn);fprin tf(fp,Thatcomma ndis no tyetimpleme ntedr n);fclose

8、(fp);return。;/*endoffunctioncannot_do*/244404响应/*函数名:do_404*描述:*参数:*返回值:*/in tdo_404(char*item,i ntfd)FILE*fp=fdope n(fd,w);fprin tf(fp,HTTP/1.0404NotFou ndrn);fprin tf(fp,C onten t-type:text/plai nrn);fprin tf(fp,rn);fprin tf(fp,Theitemyourequested:%srnis notfoun drn,item); fclose(fp);return。;/*end

9、offunctiondo_404*/245判断是否是目录/*函数名:isadir*描述:*参数:*返回值:*/in tisadir(char*f)structstati nfo;return(stat(f,&in fo)!=-1 &S_I SDIR(i nfo.st_mode);/*endoffunctionisadir*/246判断文件是否存在/* 函数名:no t_exist*描述:*参数:*返回值:*/intno t_exist(char*f)structstati nfo;return(stat(f,&in fo)=-1);/*endoffunctionnot_exist*/247列出

10、目录信息 /*函数名:do_ls*描述:*参数:*返回值:*/do_ls(char*dir,i ntfd)FILE*fp;fp=fdope n(fd,w);header(fp,text/pla in);fprin tf(fp,rn);fflush(fp);dup2(fd,STD0UT_FILEN0);dup2(fd,STDERR_FILEN0);close(fd);execlp(ls,ls,-l,dir,NULL);perror(dir);exit(1);/*endofunctiondo_ls*/248判断文件类型/* 函数名:file_type*描述:返回文件后缀名*参数:*返回值: */c

11、har*file_type(char*f)char*cp;if(cp=strrchr(f,.)!=NULL)retur ncp+1;return;/*endoffunctionfile_type*/249执行CGI程序/*函数名:do_exec*描述:*参数:*返回值:*/in tdo_exec(char*prog,i ntfd)FILE*fp;fp=fdope n(fd,w);header(fp,NULL);fflush(fp);dup2(fd,1);dup2(fd,2);close(fd);execl(prog,prog,NULL);perror(prog);return。;/*endof

12、functiondo_exect*/2410判断请求的是否是cgi程序/* 函数名:ends_in_cgi*描述:*参数:*返回值:*/inten ds_in_cgi(char*f)return(strcmp(file_type (f) ,cgi)=0);/*endoffunctionends_in_cgi*/2.4.11返回请求的文件/*函数名:do_cat*描述:发送回包的主体,紧跟在http消息头后*参数:*返回值:*/in tdo_cat(char*f,i ntfd)char*exte nsio n=file_type (f);char*c on te nt=text/plai n;F

13、ILE*fpsock,*fpfile;intc;if(strcmp(exte nsio n,html)=0)con te nt=text/html;elseif(strcmp(exte nsio n,gif)=0)con te nt=image/gif;elseif(strcmp(exte nsio n,jpg)=0)conten t=image/jpeg;elseif(strcmp(exte nsio n,jpeg)=0)conten t=image/jpeg;fpsock=fdope n( fd,w);fpfile=fope n(f,r);if(fpsock!=NULL&fpfile!=N

14、ULL)header(fpsock,c onten t);fprin tf(fpsock,rn);while(c=getc(fpfile)!=EOF)putc(c,fpsock);fclose(fpfile);fclose(fpsock);return。;/*endofunctiondo_cat*/3. 实验验证3.1实验设备及材料局域网环境下,使用一台FreeBSD系统PC作为服务器,若干台PC作为客户机,使用IE 浏览器请求服务器。3.2实验步骤1. 启动服务器。2. 客户机在浏览器地址栏输入“服务器IP :端口号/请求文件名”。3. 观察服务器响应的内容并记录。3.3实验截图1.启动服务

15、器。2. 请求html文件3. 请求jpg文件4. 显示目录文件:3.4实验结果客户机请求后服务器后,能够正常显示所请求的网页、图片和目录的信息。4. 思考和总结经过一星期的努力,我们的小型 http服务器已经能够显示网页和图片了,并且能够返回 当前目录的信息了,但是没有来得及加入 CGI功能,在机房实验时因为网络的原因,没有演示成 功,留下点遗憾。但总体来说,这次课程设计还是让我们收获颇多:首先,以前总觉得上网很神秘,在浏览 器里点点鼠标,就能看到任何我们想看到的信息,后台到底做了哪些工作我们都不知道,而这次 我们成功实现了一个小型的http服务器,能访问我们自己的网页,这种兴奋和成就感不言而喻; 其次,在实现http服务器的过程中,我们熟悉了 http协议等网络相关知识,巩固并实践了上学 期网络课程所学内容;还有,我们又锻炼了UNIX环境下编程开发能力,并且领略了开源软件开发的魅力,为以后的工作打下了基础;最后,我们还会继续完善这个http服务器,使其功能越来越强大,也许我们以后就可以在我们自己的服务器上挂起自己的网站!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1