http代理服务器课程设计报告.doc
- 文档编号:1638936
- 上传时间:2022-10-23
- 格式:DOC
- 页数:18
- 大小:155.50KB
http代理服务器课程设计报告.doc
《http代理服务器课程设计报告.doc》由会员分享,可在线阅读,更多相关《http代理服务器课程设计报告.doc(18页珍藏版)》请在冰豆网上搜索。
目 录
一、绪论 1
二、需求分析 2
三、详细设计 5
四、软件测试 9
五、设计小结 10
参考文献 11
附录 11
一、绪论
本次课设主要要做的是要理解winsock技术网络编程的技术,分析http代理应用程序设计原理,然后选择合适的开发环境用winsock技术来设计http代理的应用程序。
首先先简单的介绍几个相关名词的基本概念:
1.Winsock
Windows下网络编程的规范-WindowsSockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口,现已成为Windows网络编程的事实上的标准。
WindowsSockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。
此外,在一个特定版本Windows的基础上,WindowsSockets也定义了一个二进制接口(ABI),以此来保证应用WindowsSocketsAPI的应用程序能够在任何网络软件供应商的符合WindowsSockets协议的实现上工作。
因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。
2.http代理
www对于每一个上网的人都再熟悉不过了,www连接请求就是采用的http协议,所以我们在浏览网页,下载数据(也可采用ftp协议)是就是用http代理。
它通常绑定在代理服务器的80、3128、8080等端口上。
3.http协议
HTTP协议即超文本传输协议,是Internet上进行信息传输时使用最为广泛的一种非常简单的通信协议。
部分局域网对协议进行了限制,只允许用户通过HTTP协议访问外部网站。
4.http代理服务器
代理服务器英文全称是ProxyServer,其功能就是代理网络用户去取得网络信息。
形象的说:
它是网络信息的中转站。
在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。
代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。
而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。
更重要的是:
ProxyServer(代理服务器)是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的对话层。
二、需求分析
理解winsock技术网络编程技术,分析HTTP代理应用程序设计原理和程序流程,选择合适的开发环境,参考已有的HTTP程序功能,设计实现HTTP代理功能的应用程序。
1.winsock的理解与分析
这次课设要使用网络编程技术,这就要求掌握winsock的相关知识,因为winsock是Windows下网络编程的规范,是被广泛应用的、开放的、支持多种协议的网络编程接口,要使用winsock编程技术应该了解一些TCP/IP的基础知识,因为WinSock其实就是TCP/IP协议的一种封装,我们可以通过调用WinSock的接口函数来调用TCP/IP的各种功能,例如如果想用TCP/IP协议来发送数据,你就可以使用WinSock的接口函数Send()来调用TCP/IP的发送数据功能,至于具体怎么发送数据,WinSock已经帮你封装好了这种功能,当然这里的TCP/IP协议准确的说来应该是TCP/UDP/IP协议。
Winsocket函数:
Windows 的Socket函数有许多, 我没有做详细介绍, 这里的函数都是简要说明其用途, 这里的主要目的是为了后面的三个应用服务。
函数说明:
WSAStartup函数
初始化Winsock
[声明]
int WSAStarup(WORD wVersionRequested,LPWSADATA lpWSAData);
[参数]
wVersionRequested - 要求使用Winsock的最低版本号
lpWSAData - Winsock的详细资料
[返回值]
当函数成功调用时返回0
失败时返回非0的值
socket函数
用于生成socket(soket Descriptor)
[声明]
SOCKET socket(int af,int type,int protocol);
[参数]
af - 地址家族(通常使用:
AF_INET)
type - socket的种类
SOCK_STREAM :
用于TCP协议
SOCK_DGRAM :
用于UDP协议
protocol - 所使用的协议
[返回值]
当函数成功调用时返回一个新的SOCKET(Socket Descriptor)
失败时返回INVALID_SOCKET.
inet_addr函数
地址转换, 把"A.B.C.D"的IP地址转换为32位长整数
[声明]
unsigned long inet_addr ( const char FAR *cp );
[参数]
cp - 指向IP地址字符串的指针
[返回值]
当函数成功调用时返回用32位整数表示的IP地址
失败时返回INADDR_NONE.
gethostbyname函数
从主机名获取主机信息.
[声明]
struct hostent FAR * gethostbyname ( const char FAR *name );
[参数]
name - 指向主机名字符串的指针
[返回值]
当函数成功调用时返回主机信息
失败时返回NULL(空值)
recv函数
利用Socket进行接受数据.
[声明]
int recv ( SOCKET s , char FAR *buf , int len , int flags );
[参数]
s - 指向用Socket函数生成的Socket Descriptor
buf - 接受数据的缓冲区(数组)的指针
len - 缓冲区的大小
flag - 调用方式(MSG_PEEK 或 MSG_OOB)
[返回值]
成功时返回收到的字节数.
如果连接被中断则返回0
失败时返回 SOCKET_ERROR
sendto函数
发送数据.
[声明]
int sendto ( SOCKET s , const char FAR *buf , int len , int flags , const struct sockaddr FAR *to , int token );
[参数]
s - 指向用Socket函数生成的Socket Descriptor
buf - 接受数据的缓冲区(数组)的指针
len - 缓冲区的大小
flag - 调用方式(MSG_DONTROUTE , MSG_OOB)
to - 指向发送方SOCKET地址的指针
token - 发送方SOCKET地址的大小
[返回值]
成功时返回已经发送的字节数.
失败时返回SOCKET_ERROR
2.有关http代理协议的体系结构
本课设所做的是代理是一种应用层上面的代理,所代理的协议是HTTP,也就是经常见到的Web代理,网络代理就是一个连接客户端(设定需要代理的计算机)和服务器端(需要访问资源的服务器)的桥,以下是网络代理服务的一个典型模型图:
代理服务的运行的流程:
(1).能够接收并解析客户端的请求。
(2).创建到服务器的新连接,并根据转发客户端的请求信息。
(3).接收服务器反馈的信息。
(4).能够发出或解释服务器的响应并将该响应传回给客户端。
三、详细设计
1.程序流程图和设计方案
程序的流程图如下:
实例连接web服务器上
侦听端口,接收客户端浏览器发送来的Web请求信息
解析出Web服务器的地址,创建socket实例
通过创建的Socket传送客户端的Web请求数据包到Web服务器的80端口
接收Web服务器返回页面数据
把接收来的数据传送到客户端
完成,实现了web代理
设计方案:
主要包括三个部分内容:
1).创建一个Web代理类。
2).Web代理服务的类的实例化。
3).通过这个Web代理类的实例实现Web代理服务。
具体方案可以参见下文。
2.选择开发环境,编译源程序
选择visualstudio.net2003开发环境
源程序编译及步骤:
1).创建一个web代理类,命名WebProxy,编辑Proxy.cs文件:
usingSystem;
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.Text;
usingSystem.IO;
//以上代码是导入Proxy.cs中要使用到的命名空间
2).用下列构造函数替代默认的构造函数。
下面的代码是在Proxy类中创建一个构造函数。
Proxy类只有一个构造函数,并且这个构造函数只有一个参数,这个参数是Socket对象,它主要用来和客户端进行数据交换,是一个客户Socket。
publicProxy(Socketsocket)
{ this.clientSocket=socket;}
3).创建Proxy类中的Run方法,Run方法是Proxy类中唯一的方法。
其功能是从客户端接收HTTP请求,并传送到Web服务器,然后从Web服务器接收反馈来的数据,并传送到客户端。
为了实现这二个不同方面的数据传送,Run方法中是通过二个Socket实例来实现的。
由于HTTP是TCP/IP参考模型中的应用层协议,它建立于TCP协议之上,所以创建的Socket实例使用的协议类型应该为TCP协议。
下面代码是创建可以传送HTTP请求命令到Web服务器和接收来自Web服务器反馈来信息的Socket实例:
SocketIPsocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
4).另外一个Socket是在代理服务程序侦听端口号,接收挂起的连接请求时候得到的,以此Socket为参数,利用Proxy类中的构造函数,来创建一个Proxy实例的。
此Socket实现从客户端接收HTTP请求信息,并传送数据到客户端。
创建Proxy类的Run方法:
publicvoidRun()
{stringclientmessage="";//存放来自客户端的HTTP请求字符串
stringURL="";//存放解析出地址请求信息
intbytes=ReadMessage(read,refclientSocket,refclientmessage);
if(bytes==0)
{ return;}
intindex1=clientmessage.IndexOf('');
intindex2=clientmessage.Inde
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- http 代理服务器 课程设计 报告