c语言综合实验报告Http Server和精简的浏览器Word文档格式.docx
- 文档编号:15757101
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:10
- 大小:722.24KB
c语言综合实验报告Http Server和精简的浏览器Word文档格式.docx
《c语言综合实验报告Http Server和精简的浏览器Word文档格式.docx》由会员分享,可在线阅读,更多相关《c语言综合实验报告Http Server和精简的浏览器Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
一、实验目的3
1.1实验目标3
1.2整体框架3
二、实验要求3
三、实验内容4
3.1工程介绍4
3.2实现功能4
3.3实验分析5
3.3.1实验思想5
3.3.2实验流程5
3.3.3浏览器端实现5
3.3.4服务器端实现6
3.3.5实验结果演示8
一、实验目的
1.1实验目标
做一个简易B/S系统——HttpServer和精简的浏览器
1.2整体框架
浏览器与web服务器通信协议:
传输层使用TCP应用层使用HTTP
二、实验要求
总共分为两个程序:
浏览器端、服务器端
A、浏览器端是一个精简的浏览器,可以是用户界面也可以是控制台模式,基本功能如下:
1、能接收用户输入的使用IP地址的URL,如http:
//127.0.0.1:
80/test.html
2、能显示接收到的响应,包括响应头和响应文件。
可以显示在控制台上,也可以显示在用户界面上,也可以调用系统浏览器打开
3、通信使用HTTP协议,至少应支持GET
B、服务器端是一个精简的Web服务器(HTTP服务器),使用控制台模式,基本功能如下:
1、能接收用户浏览器端GET请求
2、能够读取服务器中存储的html文件,并返回给请求客户端
3、使用一种并发技术(多进程/多线程/多路IO复用)来提高处理请求的并发度
4、支持简单的日志功能:
记录(访问ip、访问时间、访问资源)等信息
可选扩展选项(可选):
1、服务器端支持错误处理,如要访问的URL不存在时回复404错误等
2、服务器端为了提高处理速度,可以使用缓存机制,包括文件缓存内存数据结构的设计
3、服务器端除了支持GET,可以支持更多的HTTP命令,并编写相应的测试用例
4、服务器端增加日志分析模块,能够显示不同时间段的访问量、平均响应时间等统计数据和性能数据
5、HTTP可以支持压缩,比如gzip。
服务器端可以增加压缩支持
6、高级特性:
实现CGI模块或模仿nginx和apache的其他特性
三、实验内容
3.1工程介绍
实验总目录下有两个文件夹以及两个测试用的HTML文件,文件夹中一个是browser,一个是server。
browser中存放browser.c、browser.h以及用于读写文件的filerw.c与filerw.h以及Makefile文件。
此外还有用于保存浏览器访问记录的data文件。
Server中存放server.c、server.h、filerw.c与filerw.h、Makefile文件以及用于实现服务器日志功能,记载访客记录的data文件。
3.2实现功能
基础功能全部实现,比如运用多线程实现并发、简单日志功能、够读取服务器中存储的html文件,并返回给请求客户端,通信使用http协议等。
此外扩展功能实现了错误处理以及用于提高访问速度缓存机制。
3.3实验分析
3.3.1实验思想
使用socket来实现浏览器与服务器之间的通信。
为了建立socket,程序可以调用socket函数,该函数返回一个类似于文件描述符的句柄。
通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。
面向连接的客户程序使用connect函数来配置socket并与远端服务器建立一个TCP连接,其函数原型为:
intconnect(intsockfd,structsockaddr*serv_addr,intaddrlen)。
send()和recv()这两个函数用于面向连接的socket上进行数据传输。
3.3.2实验流程
首先打开server让它运作,然后打开browser,输入URL,请求就会生成报文(http协议)并发送给server。
server接收到报文后,解析报文,并返回相应的应答报文以及请求资源。
3.3.3浏览器端实现
浏览器端首先输入UML串,然后解析串,得到IP地址、端口,及访问的文件请求。
通过调用生成请求头的方法生成请求头,然后把相关的请求发给服务器,同时将访问记录写入文件,实现浏览器端记录历史数据的功能。
然后把从服务器段发来的响应信息以及访问的资源内容显示出来。
需要注意的一点是需要输入以下格式的资源请求:
http:
//127.0.0.1:
:
8080/test.html其中:
//是固定不变的,本服务器现只支持http协议。
127.0.0.1是要访问的web服务器所用的ip地址(本机ip地址),浏览器暂时不支持dns地址解析。
8080端口是我在服务器中定义的默认端口。
3.3.4服务器端实现
由于TCP的服务器端socket基本流程为socket->
bind->
listen->
accept->
send/recv->
closesocket,客户端基本流程为socket->
connect->
closesocket。
其中客户端connect函数应该是和服务器端的listen函数相互作用,而不是accept函数。
每当有一个客户端connect了,listen的队列中就加入一个连接,每当服务器端accept了,就从listen的队列中取出一个连接,转成一个专门用来传输数据的socket(accept函数的返回值),
另外,当accept生成的那个专门的用来传输数据的socket没有被close(closesocket函数)掉之前,accept是不会释放那个socket的,也就是说在close之前,accept无法从listen的队列中取出一个新的连接转成传输专用的socket。
所以我的服务器采用多线程处理来实现并发,就可以存在多个accept,每过来一个连接就建立一个线程,线程调用与浏览器端通信的函数来处理此链接。
并发处理更高效。
因为实现了并发访问,因此关于写操作就需要用到互斥锁来控制同步。
因此代码中最开始就初始化了互斥锁,在写操作前后加锁。
关于缓存机制的实现:
原理就是,第一次访问时,从文件中读取资源后将资源存入缓存,当下次调用是直接从缓存中读取。
关于错误处理的实现:
最开始index初始化为0,在上一步缓存机制的for循环中,会将浏览器申请访问的资源与服务器中的资源进行比较,如果匹配会给index加1,如果index等于0,那么就可以判断出是404error.
3.3.5实验结果演示
先运行server,然后运行browser,输入http:
8080/test.html运行结果如下所示:
Browser界面:
先输出请求信息,然后输出服务器发来的相应信息以及请求的html文件的内容。
这是服务器端显示接受到的浏览器发来的get请求,最下面一句话显示是第一次请求该资源。
缓存中还没有该资源。
接下来是输入http:
8080/test2.html显示的结果:
服务器端:
输入一个服务器端没有的资源显示的结果:
输入l查看浏览记录:
当再次访问test.html时,将从缓存中直接读数据,最后一行显示测试结果。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言综合实验报告Http Server和精简的浏览器 语言 综合 实验 报告 Http Server 精简 浏览器