http服务器的设计与实现_第1页
http服务器的设计与实现_第2页
http服务器的设计与实现_第3页
http服务器的设计与实现_第4页
http服务器的设计与实现_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络课程设计实验报告网络课程设计实验报告 题 目 HTTP 服务器的设计及实现 姓 名 孙宇飞 庄好涛 王斌 学 院 信息科学技术学院 专 业 计算机科学与技术 班 级 计科 82 班 学 号 1918215 1928216 1928209 指导老师 叶锡君 职称 副教授 2011 年 9 月 11 日 南京农业大学教务处制 1 目录目录 目录目录 1 设计任务及要求 1 1 1 设计目的 1 1 2 设计要求 1 2 工作原理及设计方案 1 2 1 工作原理 1 2 2 设计方案 2 2 3 开发环境 2 2 4 程序流程图 2 2 5 核心代码 4 2 4 1 主程序 4 2 4 2 请求处理函数 5 2 4 3 无法响应请求 6 2 4 4 404 响应 6 2 2 4 5 判断是否是目录 7 2 4 6 判断文件是否存在 7 2 4 8 判断文件类型 8 2 4 9 执行 CGI 程序 9 2 4 10 判断请求的是否是 cgi 程序 9 3 实验验证 11 3 1 实验设备及材料 11 3 2 实验步骤 11 3 3 实验截图 11 3 4 实验结果 13 4 思考和总结 13 3 1 设计任务及要求设计任务及要求 1 1 设计目的设计目的 运用数据通信及网络课程所学的知识 设计一个简单的 http 服务器 在实现的过 程中继续深入了解网络通信的原理 锻炼 UNIX 环境下网络编程的能力 熟悉 socket 编程原理和 http 协议 从而巩固所学网络知识 1 2 设计要求设计要求 1 要能实现 get 方法 2 能响应请求的 html 页面 3 还能够响应请求的 jpg 的等图片文件 4 能响应请求的目录的信息 并以列表显示 2 工作原理及设计方案工作原理及设计方案 2 1 工作原理工作原理 HTTP 协议工作流程 1 首先客户机与服务器需要建立连接 只要单击某个超级链接 HTTP 的工作就开 始了 2 建立连接后 客户机发送一个请求给服务器 请求方式的格式为 统一资源标 识符 URL 协议版本号 后边是 MIME 信息 包括请求修饰符 客户机信息和可 能的内容 3 服务器接到请求后 给予相应的响应信息 其格式为一个状态行 包括信息的 协议版本号 一个成功或错误的代码 后边是 MIME 信息包括服务器信息 实体信息 和可能的内容 4 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上 然后客 http 工作流程图户机与服务器断开连接 2 2 设计方案设计方案 协议版本号 使用 HTTP 1 0 4 请求方法 仅实现 get 方法 响应文件的类型 text plain image gif image jpg image jpeg 工作模式 多进程模式 每个进程单独处理一个请求 2 3 开发环境开发环境 Vmware Workstation 6 5 虚拟机下 FreeBSD 环境 用 C 语言进行开发 开发 工具包括 vim gcc gdb 2 4 程序流程图程序流程图 图图 1 主程序主程序 创建 socket 连接 接收 client 连接 读取 client 请求 处理请求 关闭 socket 循环 5 图图 2 请求处理程序请求处理程序 Fork 0 退出 Y N 响应 501 错误 GET 方法 N Y 请求对象存在 响应 404 错误 Y N 请求对象为目录 响应目录信息 Y N 请求对象为 CGI 交给 CGI 程序执行 Y N 响应请求 的文件 返回 6 2 5 核心代码核心代码 2 4 1 主程序主程序 int main int argc char argv int sock fd FILE fpin char request BUFSIZ if argc 1 fprintf stderr usage webserv port n exit 1 创建 socket 连接 sock make server socket atoi argv 1 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 7 return 0 2 4 2 请求处理函数请求处理函数 int process rq char rq int fd 加 void 会报警告不知道为什么 char cmd BUFSIZ arg BUFSIZ 创建一个新进程 如果不是子进程则直接返回 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 fd else if isadir arg do ls arg fd else if ends in cgi arg do exec arg fd else 8 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 Implemented r n fprintf fp Content type text plain r n fprintf fp r n fprintf fp That command is not yet implemented r n 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 Not Found r n fprintf fp Content type text plain r n fprintf fp r n 9 fprintf fp The item you requested s r nis not found r n item fclose fp return 0 end of function do 404 2 4 5 判断是否是目录判断是否是目录 函数名 isadir 描述 参数 返回值 int isadir char f struct stat info return stat f end of function isadir 2 4 6 判断文件是否存在判断文件是否存在 函数名 not exist 描述 参数 返回值 int not exist char f struct stat info return stat f end of function not exist 2 4 7 列出目录信息 函数名 do ls 10 描述 参数 返回值 do ls char dir int fd FILE fp fp fdopen fd w header fp text plain fprintf fp r n 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 type 描述 返回文件后缀名 参数 返回值 char file type char f char cp if cp strrchr f NULL return cp 1 11 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 NULL 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 描述 参数 返回值 12 int ends in cgi char f return strcmp file type f cgi 0 end of 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 extension 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 fprintf fpsock r n 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 启动服务器启动服务器 14 2 请求请求 html 文件文件 3 请求请求 jpg 文件文件 15 4 显示目录文件 显示目录文件 3 4 实验结果实验结果 客户机请求后服务器后 能够正常显示所请求的网页 图片和目录的信息 4 思考和总结思考和总结 经过一星期的努力 我们的小型 http 服务器已经能够显示网页和图片了 并且能 够返回当前目录的信息了 但是没有来得及加入 CGI 功能 在机房实验时因为网络的 原因 没有演示成功 留下点遗憾 但总体来说 这次课程设计还是让我们收获颇多 首先 以前总觉得上网很神秘 在浏览器里点点鼠标 就能看

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论