http服务器的设计与实现

http服务器的设计与实现

ID:957223

大小:592.00 KB

页数:16页

时间:2017-10-20

http服务器的设计与实现_第1页
http服务器的设计与实现_第2页
http服务器的设计与实现_第3页
http服务器的设计与实现_第4页
http服务器的设计与实现_第5页
资源描述:

《http服务器的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、网络课程设计实验报告题目:HTTP服务器的设计及实现姓名:孙宇飞、庄好涛、王斌学院:信息科学技术学院专业:计算机科学与技术班级:计科82班学号:1918215、1928216、1928209指导老师:叶锡君职称:副教授2011年9月11日南京农业大学教务处制15目录目录1.设计任务及要求11.1设计目的11.2设计要求12.工作原理及设计方案12.1工作原理12.2设计方案22.3开发环境22.4程序流程图22.5核心代码42.4.1主程序42.4.2请求处理函数52.4.3无法响应请求62.4.4404响应6152.4.5判断是否是目录72.4.6判断文件是否存在72.4

2、.8判断文件类型82.4.9执行CGI程序92.4.10判断请求的是否是cgi程序93.实验验证113.1实验设备及材料113.2实验步骤113.3实验截图113.4实验结果134.思考和总结13151.设计任务及要求1.1设计目的运用数据通信及网络课程所学的知识,设计一个简单的http服务器,在实现的过程中继续深入了解网络通信的原理,锻炼UNIX环境下网络编程的能力,熟悉socket编程原理和http协议,从而巩固所学网络知识。1.2设计要求1)要能实现get方法;2)能响应请求的html页面;3)还能够响应请求的jpg的等图片文件;4)能响应请求的目录的信息,并以列表显

3、示;2.工作原理及设计方案2.1工作原理HTTP协议工作流程:1.首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。2.建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息:包括请求修饰符、客户机信息和可能的内容。  3.服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。  4.客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客http工作流程图户机与服务器断开连

4、接。   2.2设计方案协议版本号:使用HTTP1.015请求方法:仅实现get方法响应文件的类型:text/plain,image/gif,image/jpg,image/jpeg工作模式:多进程模式,每个进程单独处理一个请求。2.3开发环境VmwareWorkstation6.5虚拟机下FreeBSD环境,用C语言进行开发,开发工具包括:vim,gcc,gdb。2.4程序流程图创建socket连接接收client连接读取client请求处理请求关闭socket循环图1.主程序15Fork()!=0退出YN响应501错误GET方法?NY请求对象存在?响应404错误YN请求

5、对象为目录?响应目录信息YN请求对象为CGI交给CGI程序执行YN响应请求的文件返回图2.请求处理程序152.5核心代码2.4.1主程序intmain(intargc,char*argv[]){intsock,fd;FILE*fpin;charrequest[BUFSIZ];if(argc==1){fprintf(stderr,"usage:webservport");exit(1);}/*创建socket连接*/sock=make_server_socket(atoi(argv[1]));if(sock==-1){exit(2);}/*主循环*/while(1){//

6、接收socketfd=accept(sock,NULL,NULL);fpin=fdopen(fd,"r");//读取请求fgets(request,BUFSIZ,fpin);printf("gotacall:request=%s",request);read_til_crnl(fpin);//处理请求process_rq(request,fd);//关闭socketfclose(fpin);15}return0;}2.4.2请求处理函数intprocess_rq(char*rq,intfd)//加void会报警告不知道为什么?{charcmd[BUFSIZ],arg[BUF

7、SIZ];/*创建一个新进程,如果不是子进程则直接返回*/if(fork()!=0){return-1;}strcpy(arg,"./");//加上./前缀if(sscanf(rq,"%s%s",cmd,arg+2)!=2){return-1;}if(strcmp(cmd,"GET")!=0){cannot_do(fd);}elseif(not_exist(arg)){do_404(arg,fd);}elseif(isadir(arg)){do_ls(arg,fd);}elseif(ends_in_cgi(arg)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。