logo资料库

http代理服务器课程设计报告.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
一、绪论
二、需求分析
三、详细设计
四、软件测试
五、设计小结
参考文献
附录
目 录 一、绪论 ..........................................1 二、需求分析 ......................................2 三、详细设计 ......................................5 四、软件测试 ......................................9 五、设计小结 .....................................10 参考文献 .........................................11 附录 .............................................11
一、绪论 本次课设主要要做的是要理解 winsock 技术网络编程的技术,分析 http 代理应用程序设计原理,然后选择合适的开发环境用 winsock 技术来设计 http 代理的应用程序。 首先先简单的介绍几个相关名词的基本概念: 1.Winsock Windows 下网络编程的规范-Windows Sockets 是 Windows 下得到广泛 应用的、开放的、支持多种协议的网络编程接口,现已成为 Windows 网络 编程的事实上的标准。Windows Sockets 规范本意在于提供给应用程序开发 者一套简单的 API,并让各家网络软件供应商共同遵守。此外,在一个特定 版本 Windows 的基础上,Windows Sockets 也定义了一个二进制接口(ABI), 以此来保证应用 Windows Sockets API 的应用程序能够在任何网络软件供 应商的符合 Windows Sockets 协议的实现上工作。因此这份规范定义了应 用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用 和相关语义。 2.http 代理 www 对于每一个上网的人都再熟悉不过了,www 连接请求就是采用 的 http 协议,所以我们在浏览网页,下载数据(也可采用 ftp 协议) 是就是用 http 代理。它通常绑定在代理服务器的 80、3128、8080 等 端口上。 3.http 协议 HTTP 协议即超文本传输协议,是 Internet 上进行信息传输时使用 最为广泛的一种非常简单的通信协议。部分局域网对协议进行了限制, 只允许用户通过 HTTP 协议访问外部网站。 4.http 代理服务器 代理服务器英文全称是 Proxy Server,其功能就是代理网络用户 去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下, 我们使用网络浏览器直接去连接其他 Internet 站点取得网络信息时, 须送出 Request 信号来得到回答,然后对方再把信息以 bit 方式传送 回来。 第 1 页
代理服务器是介于浏览器和 Web 服务器之间的一台服务器,有了 它之后,浏览器不是直接到 Web 服务器去取回网页而是向代理服务器 发出请求,Request 信号会先送到代理服务器,由代理服务器来取回浏 览器所需要的信息并传送给你的浏览器。而且,大部分代理服务器都 具有缓冲的功能,就好象一个大的 Cache,它有很大的存储空间,它不 断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据 在它本机的存储器上已经存在而且是最新的,那么它就不重新从 Web 服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样 就能显著提高浏览速度和效率。 更重要的是:Proxy Server(代理服务器)是 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 函数有许多, 我没有做详细介绍, 这里的函数 都是简要说明其用途, 这里的主要目的是为了后面的三个应用服务。 第 2 页
函数说明: 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 地址字符串的指针 [返回值] 第 3 页
当函数成功调用时返回用 32 位整数表示的 IP 地址 失败时返回 INADDR_NONE. gethostbyname 函数 从主机名获取主机信息. [声明] struct hostent FAR * gethostbyname ( const char FAR *na me ); [参数] 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 le n , int flags , const struct sockaddr FAR *to , int 第 4 页
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.程序流程图和设计方案 程序的流程图如下: 第 5 页
侦听端口,接收客户端浏览器发送来的 Web 请求信息 解析出 Web 服务器的地址,创建 socket 实例 实例连接 web 服务器上 通过创建的 Socket 传送客户端的 Web 请求数据包 到 Web 服务器的 80 端口 接收 Web 服务器返回页面数据 把接收来的数据传送到客户端 完成,实现了 web 代理 设计方案: 主要包括三个部分内容: 1).创建一个 Web 代理类。 2).Web 代理服务的类的实例化。 3). 通过这个 Web 代理类的实例实现 Web 代理服务。 具体方案可以参见下文。 2.选择开发环境,编译源程序 选择 visual studio .net 2003 开发环境 源程序编译及步骤: 1).创建一个 web 代理类,命名 WebProxy,编辑 Proxy.cs 文件: using System ; using System.Net ; using System.Net.Sockets ; using System.Text ; 第 6 页
using System.IO ; //以上代码是导入 Proxy.cs 中要使用到的命名空间 2). 用下列构造函数替代默认的构造函数。下面的代码是在 Proxy 类中创 建一个构造函数。 Proxy 类只有一个构造函数,并且这个构造函数只有一 个参数,这个参数是 Socket 对象,它主要用来和客户端进行数据交换,是 一个客户 Socket。 public Proxy ( Socket socket ) { this.clientSocket = socket ; } 3). 创建 Proxy 类中的 Run 方法,Run 方法是 Proxy 类中唯一的方法。其 功能是从客户端接收 HTTP 请求,并传送到 Web 服务器,然后从 Web 服务器 接收反馈来的数据,并传送到客户端。为了实现这二个不同方面的数据传 送,Run 方法中是通过二个 Socket 实例来实现的。由于 HTTP 是 TCP/IP 参 考模型中的应用层协议,它建立于 TCP 协议之上,所以创建的 Socket 实例 使用的协议类型应该为 TCP 协议。下面代码是创建可以传送 HTTP 请求命令 到 Web 服务器和接收来自 Web 服务器反馈来信息的 Socket 实例: Socket IPsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); 4). 另外一个 Socket 是在代理服务程序侦听端口号,接收挂起的连接请 求时候得到的,以此 Socket 为参数,利用 Proxy 类中的构造函数,来创建 一个 Proxy 实例的。此 Socket 实现从客户端接收 HTTP 请求信息,并传送 数据到客户端。 创建 Proxy 类的 Run 方法: public void Run ( ) { string clientmessage = " " ;//存放来自客户端的 HTTP 请求字符串 string URL = " " ;//存放解析出地址请求信息 int bytes = ReadMessage ( read , ref clientSocket , ref clientmessage ) ; if ( bytes == 0 ) { return ;} int index1 = clientmessage.IndexOf ( ' ' ) ; int index2 = clientmessage.IndexOf ( ' ' , index1 + 1 ) ; 第 7 页
分享到:
收藏