ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:449.63KB ,
资源ID:27404156      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27404156.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(http服务器的设计与实现复习课程.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

http服务器的设计与实现复习课程.docx

1、http服务器的设计与实现复习课程网络课程设计实验报告题 目: HTTP服务器的设计及实现 姓 名: 孙宇飞、庄好涛、王斌 学 院: 信息科学技术学院 专 业: 计算机科学与技术 班 级: 计科82班 学 号: 、 指导老师: 叶锡君 职称: 副教授 2011 年 9 月 11 日南京农业大学教务处制1.设计任务及要求1.1设计目的运用数据通信及网络课程所学的知识,设计一个简单的http服务器,在实现的过程中继续深入了解网络通信的原理,锻炼UNIX环境下网络编程的能力,熟悉socket编程原理和http协议,从而巩固所学网络知识。1.2设计要求1)要能实现get方法;2)能响应请求的html页

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

3、用户的显示屏上,然后客http工作流程图户机与服务器断开连接。 2.2设计方案 协议版本号:使用HTTP 1.0 请求方法:仅实现get方法 响应文件的类型:text/plain,image/gif,image/jpg,image/jpeg工作模式:多进程模式,每个进程单独处理一个请求。2.3 开发环境Vmware Workstation 6.5 虚拟机下FreeBSD环境,用C语言进行开发,开发工具包括:vim,gcc,gdb。2.4程序流程图创建socket连接接收client连接读取client请求处理请求关闭socket循环 图1.主程序Fork() != 0退出YN响应501错误GE

4、T方法?NY请求对象存在?响应404错误YN请求对象为目录?响应目录信息YN请求对象为CGI交给CGI程序执行YN响应请求的文件返回 图2.请求处理程序2.5 核心代码 2.4.1 主程序int main ( int argc, char *argv ) int sock, fd; FILE *fpin; char requestBUFSIZ; if ( argc = 1 ) fprintf( stderr, usage: webserv portn ); exit(1); /* 创建socket连接 */ sock = make_server_socket( atoi( argv1 ) );

5、 if ( sock = -1) exit(2); /* 主循环 */ while( 1 ) /接收socket fd = accept( sock, NULL, NULL ); fpin = fdopen ( fd, r ); /读取请求 fgets( request, BUFSIZ, fpin ); printf( got a call: request = %s,request ); read_til_crnl( fpin ); /处理请求 process_rq( request, fd ); /关闭socket fclose( fpin ); return 0;2.4.2 请求处理函数

6、int process_rq ( char *rq, int fd)/加void会报警告不知道为什么? char cmdBUFSIZ, argBUFSIZ; /* 创建一个新进程,如果不是子进程则直接返回 */ 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 ); else if ( not_exist ( arg ) do_404( arg

7、, fd ); else if ( isadir ( arg ) ) do_ls( arg, fd ); else if (ends_in_cgi ( arg ) ) do_exec( arg, fd ); else do_cat( arg, fd ); return 0; /* - end of function process_rq - */2.4.3 无法响应请求int cannot_do ( int fd ) FILE *fp = fdopen( fd, w ); fprintf( fp, HTTP/1.0 501 Not Implementedrn ); fprintf( fp, C

8、ontent-type: text/plainrn ); fprintf( fp, rn ); fprintf( fp, That command is not yet implementedrn ); fclose( fp ); return 0; /* - end of function cannot_do - */2.4.4 404响应/* * 函数名: do_404 * 描述: * 参数: * 返回值: */int do_404 ( char *item, int fd ) FILE *fp = fdopen( fd, w ); fprintf( fp, HTTP/1.0 404 No

9、t Foundrn ); fprintf( fp, Content-type: text/plainrn ); fprintf( fp, rn ); fprintf( fp, The item you requested: %srnis not foundrn , item); fclose( fp ); return 0; /* - end of function do_404 - */2.4.5 判断是否是目录/* * 函数名: isadir * 描述: * 参数: * 返回值: */int isadir ( char *f ) struct stat info; return ( sta

10、t( f, &info ) != -1 & S_ISDIR(info.st_mode) ); /* - end of function isadir - */2.4.6 判断文件是否存在/* * 函数名: not_exist * 描述: * 参数: * 返回值: */int not_exist ( char *f ) struct stat info; return ( stat( f, &info ) = -1 ); /* - end of function not_exist - */2.4.7 列出目录信息/* * 函数名: do_ls * 描述: * 参数: * 返回值: */do_l

11、s ( char *dir, int fd ) FILE *fp; fp = fdopen( fd, w ); header( fp, text/plain ); fprintf( fp, rn ); fflush( fp ); dup2( fd, STDOUT_FILENO ); dup2( fd, STDERR_FILENO ); close( fd ); execlp( ls, ls, -l, dir, NULL); perror( dir ); exit( 1 ); /* - end of function do_ls - */2.4.8 判断文件类型/* * 函数名: file_ty

12、pe * 描述: 返回文件后缀名 * 参数: * 返回值: */char * file_type ( char *f ) char *cp; if ( ( cp = strrchr( f, . ) ) != NULL ) return cp+1; return ; /* - end of function file_type - */2.4.9 执行CGI程序/* * 函数名: do_exec * 描述: * 参数: * 返回值: */int do_exec ( char *prog, int fd ) FILE *fp; fp = fdopen( fd, w ); header( fp, N

13、ULL ); fflush( fp ); dup2( fd, 1 ); dup2( fd, 2 ); close( fd ); execl( prog, prog, NULL ); perror( prog ); return 0; /* - end of function do_exect - */2.4.10 判断请求的是否是cgi程序/* * 函数名: ends_in_cgi * 描述: * 参数: * 返回值: */int ends_in_cgi ( char *f ) return ( strcmp( file_type( f ), cgi ) = 0 ); /* - end of

14、function ends_in_cgi - */2.4.11 返回请求的文件/* * 函数名: do_cat * 描述: 发送回包的主体,紧跟在http消息头后 * 参数: * 返回值: */int do_cat ( char *f, int fd ) char *extension = file_type( f ); char *content = text/plain; FILE *fpsock, *fpfile; int c; if ( strcmp(extension, html ) = 0 ) content = text/html; else if ( strcmp( exten

15、sion, gif) = 0 ) content = image/gif; else if ( strcmp( extension, jpg ) = 0 ) content = image/jpeg; else if ( strcmp( extension, jpeg ) = 0 ) content = image/jpeg; fpsock = fdopen( fd, w ); fpfile = fopen ( f, r ); if ( fpsock != NULL & fpfile != NULL ) header( fpsock, content ); fprintf( fpsock,rn

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

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

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1