没有合适的资源?快使用搜索试试~ 我知道了~
3170103456-应承峻-实验报告七1
需积分: 0 0 下载量 52 浏览量
2022-08-03
15:51:23
上传
评论
收藏 1.23MB PDF 举报
温馨提示
试读
15页
1. 不断读取客户端发送过来的字节,并检查其中是否连续出现了 2 个回 2. 根据解析出来的文件和路径名,读取响应的磁盘文件(该路径和服务 3. 准备好一个足够
资源详情
资源评论
资源推荐
本科实验报告
课程名称:
计算机网络基础
实验名称:
实现一个轻量级的 WEB 服务器
姓 名:
应承峻
学 院:
计算机学院
系:
计算机系
专 业:
软件工程
学 号:
3170103456
指导教师:
高艺
2019 年 12 月 15 日
浙江大学实验报告
实验名称:实现一个轻量级的 WEB 服务器 实验类型: 编程实验
同组学生: 夏林轩 实验地点: 计算机网络实验室
一、 实验目的
深入掌握 HTTP 协议规范,学习如何编写标准的互联网应用服务器。
二、 实验内容
⚫ 服务程序能够正确解析 HTTP 协议,并传回所需的网页文件和图片文件
⚫ 使用标准的浏览器,如 IE、Chrome 或者 Safari,输入服务程序的 URL 后,能够正
常显示服务器上的网页文件和图片
⚫ 服务端程序界面不做要求,使用命令行或最简单的窗体即可
⚫ 功能要求如下:
1. 服务程序运行后监听在 80 端口或者指定端口
2. 接受浏览器的 TCP 连接(支持多个浏览器同时连接)
3. 读取浏览器发送的数据,解析 HTTP 请求头部,找到感兴趣的部分
4. 根据 HTTP 头部请求的文件路径,打开并读取服务器磁盘上的文件,以 HTTP
响应格式传回浏览器。要求按照文本、图片文件传送不同的 Content-Type,以
便让浏览器能够正常显示。
5. 分别使用单个纯文本、只包含文字的 HTML 文件、包含文字和图片的 HTML
文件进行测试,浏览器均能正常显示。
⚫ 本实验可以在前一个 Socket 编程实验的基础上继续,也可以使用第三方封装好的
TCP 类进行网络数据的收发
⚫ 本实验要求不使用任何封装 HTTP 接口的类库或组件,也不使用任何服务端脚本程
序如 JSP、ASPX、PHP 等
⚫ 本实验可单独完成或组成两人小组。若组成小组,则一人负责编写服务器 GET 方
法的响应,另一人负责编写 POST 方法的响应和服务器主线程。
三、 主要仪器设备
联网的 PC 机、Wireshark 软件、Visual Studio、gcc 或 Java 集成开发环境。
四、 操作方法与实验步骤
⚫ 阅读 HTTP 协议相关标准文档,详细了解 HTTP 协议标准的细节,有必要的话使用
Wireshark 抓包,研究浏览器和 WEB 服务器之间的交互过程
⚫ 创建一个文档目录,与服务器程序运行路径分开
⚫ 准备一个纯文本文件,命名为 test.txt,存放在 txt 子目录下面
⚫ 准备好一个图片文件,命名为 logo.jpg,放在 img 子目录下面
⚫ 写一个 HTML 文件,命名为 test.html,放在 html 子目录下面,主要内容为:
<html>
<head><title>Test</title></head>
<body>
<h1>This is a test</h1>
<img src="img/logo.jpg">
<form action="dopost" method="POST">
Login:<input name="login">
Pass:<input name="pass">
<input type="submit" value="login">
</form>
</body>
</html>
⚫ 将 test.html 复制为 noimg.html,并删除其中包含 img 的这一行。
⚫ 服务端编写步骤(需要采用多线程模式)
a) 运行初始化,打开 Socket,监听在指定端口(请使用学号的后 4 位作为服务
器的监听端口)
b) 主线程是一个循环,主要做的工作是等待客户端连接,如果有客户端连接成
功,为该客户端创建处理子线程。该子线程的主要处理步骤是:
1. 不断读取客户端发送过来的字节,并检查其中是否连续出现了 2 个回
车换行符,如果未出现,继续接收;如果出现,按照 HTTP 格式解析
第 1 行,分离出方法、文件和路径名,其他头部字段根据需要读取。
如果解析出来的方法是 GET
2. 根据解析出来的文件和路径名,读取响应的磁盘文件(该路径和服务
器程序可能不在同一个目录下,需要转换成绝对路径)。如果文件不
存在,第 3 步的响应消息的状态设置为 404,并且跳过第 5 步。
3. 准备好一个足够大的缓冲区,按照 HTTP 响应消息的格式先填入第 1
行(状态码=200),加上回车换行符。然后模仿 Wireshark 抓取的 HTTP
消息,填入必要的几行头部(需要哪些头部,请试验),其中不能缺
少的 2 个头部是 Content-Type 和 Content-Length。Content-Type 的值
要和文件类型相匹配(请通过抓包确定应该填什么),Content-Length
的值填写文件的字节大小。
4. 在头部行填完后,再填入 2 个回车换行
5. 将文件内容按顺序填入到缓冲区后面部分。
如果解析出来的方法是 POST
6. 检查解析出来的文件和路径名,如果不是 dopost,则设置响应消息的
状态为 404,然后跳到第 9 步。如果是 dopost,则设置响应消息的状
态为 200,并继续下一步。
7. 读取 2 个回车换行后面的体部内容(长度根据头部的 Content-Length
字段的指示),并提取出登录名(login)和密码(pass)的值。如果
登录名是你的学号,密码是学号的后 4 位,则将响应消息设置为登录
剩余14页未读,继续阅读
lirumei
- 粉丝: 69
- 资源: 301
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0