`
9alexking
  • 浏览: 8560 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

VC实现HTTP代理服务器

阅读更多

在编写一个通过P2P允许内网访问另一内网的web Server时,涉及截取浏览器发出的请求,对请求进行分析,如果是某个特定的HOST时,则进行转向。发起P2P请求到另一内网的某个主机。   

经过实验性编程,终于解决了该问题。

 1、 思路当前流行的浏览器的系统选项中有一个参数,即“通过代理服务器连接”,经过编程测试,当局域网中一台工作站指定了该属性,再发出Internet请求时,请求数据将发送到所指定的代理服务器上,

以下为请求数据包示例:            

    GET http://www.baidu.com/ HTTP/1.1 

    Accept: */*         

    Accept-Language: zh-cn         

    Accept-Encoding: gzip, deflate           

    User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)      

    Host: www.baidu.com   

    Proxy-Connection: Keep-Alive

其中第一行为目标URL及相关方法、协议,“Host”行指定了目标主机的地址。由此知道了代理服务的过程:接收被代理端的请求、连接真正的主机、接收主机返回的数据、将接收数据发送到被代理端。为此可编写一个简单的程序,完成上述网络通信重定向问题。

用VC设计时,创建一个监听线程来接受浏览器发起的连接。编程时应解决的一个重要问题是多重连接处理问题,为了加快代理服务的速度和被代理端的响应速度,与web 服务端连接的socket采用异步方式来进行连接。通信的衔接过程如下所示:

 1、浏览器发起socket连接到代理服务器 

 2、代理服务器监听线程接受浏览器的连接,创建一个新线程,同时将接受的socket与新线程绑定到一起。  

 3、新线程启动时,对该socket设置消息模式(我采用的是一个继承CAsyncSocket的类),并设置FD_CLOSE | FD_READ.同时,新线程向主线程发送一个登陆消息,把自己的线程ID报告给主线程(把线程ID报告给主线程,是因为在主线程有主界面,并设定一个定时器,通过主界面的定时器,向各个线程发送定时器消息,避免对每个线程都开启定时器,减少资源消耗) 4、在OnRecieve函数中读取浏览器发起的请求信息,进行分析,分析出目标主机和端口,根据http请求方式不同,作出不同的动作。目前只实现了http中GET和POST方法,同时只实现http1.1版本。处理POST方法时,需要获得消息的长度,即Content-Length的值,来判断POST的消息是否传输完毕。

 5、当得到目的主机和端口时,新建socket连接到web server.这里有点需要注意,即浏览器可能会通过一个SOCKET给代理服务器发送不同的请求主机地址。所以,对这个socket我建立了一个socket队列,该队列的每个socket连接到不同主机。我是采用CAsyncSocket的继承类来作为socket队列的成员,并将该线程绑定的socket作为CAsyncSocket继承类的成员,同时通过WSAAsyncSelect来设置异步消息方式FD_READ | FD_CLOSE。对每个请求分析其目标地址,如果该地址之前连接过,目前连接还没断开,则继续用原来的连接。与web server的连接是采用异步方式,设定一个超时值,当连接超时时,代理服务器发送超时响应,并断开与浏览器的连接。连接成功后,就发送请求。剑道独尊

 6、当接受到服务器的响应消息后,触发FD_READ消息,读取信息,并把消息通过socket成员发送到客户端浏览器这就是http代理服务器的服务过程。        

    后记由于这种设计思路仅仅在被代理端和远程主机之间增加了一个重定向功能,被代理端原有的缓存技术等特点均保留,因此效率较高。 通过该方式的实现,目前已经很适用项目的目的

分享到:
评论

相关推荐

    VC实现了一个功能简单的HTTP代理服务器

    VC实现了一个功能简单的HTTP代理服务器

    HTTP代理服务器 VC实现的,源代码

    实现了一个功能简单的HTTP代理服务器,主要介绍多线程编程相关的知识,包括初始化临界段和删除临界段,使用临界段完成多个线程对临界资源的互斥访问,创建工作线程,退出工作线程,定义和设定事件,利用事件完成多个...

    http.rar_C++ http服务器_HTTP 服务器_VC HTTP服务器_vc kingate_代理

    vc 实现的一个HTTP代理服务器的设计与实现

    http代理服务器C语言

    以前上TCP/IP课程时做的课程设计,很小的一个HTTP代理服务器,基于socket编程。VC6.0环境的。原创程序。 那时候还是新手,程序很简陋,不过好歹能用。 学校学习相关课程的学生可以参考下,当个课程作业没问题,老手...

    HTTP代理服务器代码

    每客户单线程实现http 代理服务器,参考网络资源,用VC6.0编写,满足网络程序设计课程的实验要求。

    vc代理服务器源代码

    用vc6编写,有源码带有注释,可以实现http代理

    共享上网代理服务器

    一款基于win32 vc6开发的http代理软件,可以在限制网络使用的环境下实现共享上网.使用方法:在可以上网的机器(我们称为代理服务器)上安装该软件,将我们的电脑连接到代理服务器,比如可以通过代理服务器的无线网卡...

    基于http的代理服务器

    对于新手非常适合,很清楚的说明代理服务器的实现过程,简单易懂。

    VC网络通讯编程实例

    HTTP代理服务器【\chap8\HTTP代理服务】 (9)高级网络通信编程实例 串口通信编程实例【\chap9\SerialPort】 网络流量监控【\chap9\NetTraffic】 网站下载【\chap9\ Snag】 网络五子棋系统【\chap9\FiveChess】 ...

    VC网络编程实例_3

    HTTP代理服务器【\chap8\HTTP代理服务】 (9)高级网络通信编程实例 串口通信编程实例【\chap9\SerialPort】 网络流量监控【\chap9\NetTraffic】 网站下载【\chap9\ Snag】 网络五子棋系统【\chap9\FiveChess】 ...

    利用wsdl.exe生成webservice代理类

    用来处理 HTTP 请求的代理服务器的 URL。 默认为使用系统代理服务器设置。 /proxyusername: /proxypassword: /proxydomain: 连接到要求身份验证的代理服务器时使用的凭据。 缩写形式为“/pu:”、“/pp:”和“/...

    vc++ 应用源码包_6

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC...

    VC++网络通信编程实用案例

    HTTP代理服务器【\chap8\HTTP代理服务】 (9)高级网络通信编程实例 串口通信编程实例【\chap9\SerialPort】 网络流量监控【\chap9\NetTraffic】 网站下载【\chap9\ Snag】 网络五子棋系统【\chap9\FiveChess】 ...

    vc++ 应用源码包_1

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...

    vc++ 应用源码包_2

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...

    vc++ 应用源码包_5

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC...

    vc++ 应用源码包_3

    利用VC编程在界面上实现3D文字 在MFC应用程序中浏览PDF、Word文档文件 vcdialog 自绘对话框。 vc编程:自动停靠窗体,吸附窗体 OnMoving事件处理。 vc基于HTTP协议断点续传和多线程下载源代码 VC满屏开满玫瑰花 ...

    vc++ 开发实例源码包

    ----------VC应用开发 [Visual.C..编程技巧精选500例]源代码. 内含各种例子(vc下各种控件的使用方法、标题栏与菜单栏、工具栏与状态栏、图标与光标、程序窗口、程序控制、进程与线程、字符串、文件读写操作、文件...

    大量VC++通信开发实例,全部源码

    HTTP代理服务器【\chap8\HTTP代理服务】 (9)高级网络通信编程实例 串口通信编程实例【\chap9\SerialPort】 网络流量监控【\chap9\NetTraffic】 网站下载【\chap9\ Snag】 网络五子棋系统【\chap9\FiveChess】 ...

    hetao Web 服务器软件

    hetao是一款国人原创研发的开放源代码的C语言实现的支持高并发、超高性能Web服务器,使用高性能HTTP解析器fasterhttp作为其解析核心,在开启Keep-Alive和gzip压缩时性能比nginx约快4倍。 hetao功能: * 支持HTTP/1.0...

Global site tag (gtag.js) - Google Analytics