c语言综合实验报告Http Server和精简的浏览器.docx

上传人:b****5 文档编号:2846042 上传时间:2022-11-15 格式:DOCX 页数:10 大小:722.24KB
下载 相关 举报
c语言综合实验报告Http Server和精简的浏览器.docx_第1页
第1页 / 共10页
c语言综合实验报告Http Server和精简的浏览器.docx_第2页
第2页 / 共10页
c语言综合实验报告Http Server和精简的浏览器.docx_第3页
第3页 / 共10页
c语言综合实验报告Http Server和精简的浏览器.docx_第4页
第4页 / 共10页
c语言综合实验报告Http Server和精简的浏览器.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

c语言综合实验报告Http Server和精简的浏览器.docx

《c语言综合实验报告Http Server和精简的浏览器.docx》由会员分享,可在线阅读,更多相关《c语言综合实验报告Http Server和精简的浏览器.docx(10页珍藏版)》请在冰豆网上搜索。

c语言综合实验报告Http Server和精简的浏览器.docx

c语言综合实验报告HttpServer和精简的浏览器

C语言实验报告

-----------HttpServer和精简的浏览器

姓名:

徐丽

班级:

计算机一班

学号:

201200131113

 

目录

C语言实验报告1

一、实验目的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:

//是固定不变的,本服务器现只支持http协议。

127.0.0.1是要访问的web服务器所用的ip地址(本机ip地址),浏览器暂时不支持dns地址解析。

8080端口是我在服务器中定义的默认端口。

3.3.4服务器端实现

由于TCP的服务器端socket基本流程为socket->bind->listen->accept->send/recv->closesocket,客户端基本流程为socket->connect->send/recv->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:

//127.0.0.1:

8080/test.html运行结果如下所示:

Browser界面:

先输出请求信息,然后输出服务器发来的相应信息以及请求的html文件的内容。

这是服务器端显示接受到的浏览器发来的get请求,最下面一句话显示是第一次请求该资源。

缓存中还没有该资源。

接下来是输入http:

//127.0.0.1:

8080/test2.html显示的结果:

服务器端:

输入一个服务器端没有的资源显示的结果:

输入l查看浏览记录:

当再次访问test.html时,将从缓存中直接读数据,最后一行显示测试结果。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

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

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