基于winsock技术编制HTTP代理服务器程序.doc

上传人:灯火****19 文档编号:136887998 上传时间:2020-07-03 格式:DOC 页数:7 大小:99.50KB
返回 下载 相关 举报
基于winsock技术编制HTTP代理服务器程序.doc_第1页
第1页 / 共7页
基于winsock技术编制HTTP代理服务器程序.doc_第2页
第2页 / 共7页
基于winsock技术编制HTTP代理服务器程序.doc_第3页
第3页 / 共7页
基于winsock技术编制HTTP代理服务器程序.doc_第4页
第4页 / 共7页
基于winsock技术编制HTTP代理服务器程序.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《基于winsock技术编制HTTP代理服务器程序.doc》由会员分享,可在线阅读,更多相关《基于winsock技术编制HTTP代理服务器程序.doc(7页珍藏版)》请在金锄头文库上搜索。

1、基于winsock技术编制HTTP代理服务器程序xxx xxxxxxxxxxxxxxxx摘 要:HTTP协议即超文本传输协议,是Internet上进行信息传输时使用最为广泛的一种非常简单的通信协议。部分局域网对协议进行了限制,只允许用户通过HTTP协议访问外部网站。此次编制利用winsock技术网络编程的技术,分析http代理应用程序设计原理,然后选择合适的开发环境用winsock技术来设计http代理的应用程序。关键词:HTTP协议 winsock 信息传输 一研究背景Windows下网络编程的规范Windows Sockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程

2、接口,现已成为Windows网络编程的事实上的标准。Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。本次编制是基于winsock网络编程的技术,分析http代理应用程序设计原理,然后选择合适的

3、开发环境用winsock技术来设计http代理的应用程序。1.http代理www对于每 一个上网的人都再熟悉不过了,www连接请求就是采用的http协议,所以我们在浏览网页,下载数据(也可采用ftp协议)是就是用http代理。它通常绑定在代理服务器的80、3128、8080等端口上。2.http协议HTTP协议即超文本传输协议,是Internet上进行信息传输时使用最为广泛的一种非常简单的通信协议。部分局域网对协议进行了限制,只允许用户通过HTTP协议访问外部网站。3.http代理服务器代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的

4、中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web

5、服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。更重要的是:Proxy Server(代理服务器)是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的对话层。二winsock理解winsock网络编程技术,分析HTTP代理应用程序设计原理和程序流程,选择合适的开发环境,参考已有的HTTP程序功能,设计实现HTTP代理功能的应用程序。使用网络编程技术,这就要求掌握Winsock的相关知识,因为WinSock其实就是TCP/IP协议的一种封装,我们可以通过调用WinSock的接口函数来调用TCP/IP的各种功能,

6、例如如果想用TCP/IP协议来发送数据,你就可以使用WinSock的接口函数Send()来调用TCP/IP的发送数据功能,至于具体怎么发送数据,WinSock已经帮你封装好了这种功能,当然这里的TCP/IP协议准确的说来应该是TCP/UDP/IP协议。Winsocket函数:Windows的Socket函数有许多,我没有做详细介绍,这里的函数都是简要说明其用途,这里的主要目的是为了后面的三个应用服务。函数说明: 1.WSAStartup函数:初始化Winsock 声明 intWSAStarup(WORDwVersionRequested,LPWSADATAlpWSAData); 参数 wVer

7、sionRequested-要求使用Winsock的最低版本号 lpWSAData-Winsock的详细资料 返回值 当函数成功调用时返回0,失败时返回非0的值 2.socket函数 用于生成socket(soketDescriptor) 声明 SOCKETsocket(intaf,inttype,intprotocol); 参数 af-地址家族(通常使用:AF_INET) type-socket的种类 SOCK_STREAM:用于TCP协议 SOCK_DGRAM:用于UDP协议 protocol-所使用的协议 返回值 当函数成功调用时返回一个新的SOCKET(SocketDescriptor

8、);失败时返回INVALID_SOCKET. 3.inet_addr函数:地址转换,把A.B.C.D的IP地址转换为32位长整数 声明 unsignedlonginet_addr(constcharFAR*cp); 参数 cp-指向IP地址字符串的指针 返回值 当函数成功调用时返回用32位整数表示的IP地址;失败时返回INADDR_NONE.4.gethostbyname函数:从主机名获取主机信息.声明 structhostentFAR*gethostbyname(constcharFAR*name);参数name-指向主机名字符串的指针 返回值 当函数成功调用时返回主机信息;失败时返回NUL

9、L(空值). 5.recv函数:利用Socket进行接受数据. 声明intrecv(SOCKET s,char FAR*buf,int len,intflags);参数 s-指向用Socket函数生成的SocketDescriptor buf-接受数据的缓冲区(数组)的指针 len-缓冲区的大小 flag-调用方式(MSG_PEEK或MSG_OOB) 返回值成功时返回收到的字节数.如果连接被中断则返回0。失败时返回SOCKET_ERROR 6.sendto函数:发送数据.声明 intsendto(SOCKETs,constcharFAR*buf,intlen,intflags,conststr

10、uctsockaddrFAR*to,inttoken);参数 s-指向用Socket函数生成的SocketDescriptor buf-接受数据的缓冲区(数组)的指针 len-缓冲区的大小 flag-调用方式(MSG_DONTROUTE,MSG_OOB) to-指向发送方SOCKET地址的指针 token-发送方SOCKET地址的大小 返回值 成功时返回已经发送的字节数.失败时返回SOCKET_ERROR2 有关http代理协议的体系结构 代理是一种应用层上面的代理,所代理的协议是HTTP,也就是经常见到的Web代理,网络代理就是一个连接客户端(设定需要代理的计算机)和服务器端(需要访问资源的

11、服务器)的桥,以下是网络代理服务的一个典型模型图:图3-1 本体学习周期代理服务的运行的流程:(1). 能够接收并解析客户端的请求。(2). 创建到服务器的新连接,并根据转发客户端的请求信息。(3). 接收服务器反馈的信息。(4). 能够发出或解释服务器的响应并将该响应传回给客户端。3 详细设计1. 设计方案:主要包括三个部分内容:1)创建一个Web代理类。2)Web代理服务的类的实例化。3) 通过这个Web代理类的实例实现Web代理服务。设计流程图如下:实例连接web服务器上侦听端口,接收客户端浏览器发送来的Web请求信息解析出Web服务器的地址,创建socket实例通过创建的Socket传

12、送客户端的Web请求数据包到Web服务器的80端口接收Web服务器返回页面数据把接收来的数据传送到客户端完成,实现了web代理2.选择开发环境,编译源程序选择visual studio .net 2003开发环境,源程序编译及步骤:1)创建一个web代理类,命名WebProxy,编辑Proxy.cs文件:using System ;using System.Net ;using System.Net.Sockets ;using System.Text ;using System.IO ;/以上代码是导入Proxy.cs中要使用到的命名空间2) 用下列构造函数替代默认的构造函数。下面的代码是在

13、Proxy类中创建一个构造函数。 Proxy类只有一个构造函数,并且这个构造函数只有一个参数,这个参数是Socket对象,它主要用来和客户端进行数据交换,是一个客户Socket。public Proxy ( Socket socket )this.clientSocket = socket ; 3)创建Proxy类中的Run方法,Run方法是Proxy类中唯一的方法。其功能是从客户端接收HTTP请求,并传送到Web服务器,然后从Web服务器接收反馈来的数据,并传送到客户端。为了实现这二个不同方面的数据传送,Run方法中是通过二个Socket实例来实现的。由于HTTP是TCP/IP参考模型中的应

14、用层协议,它建立于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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号