HTTP代理服务器的设计与实现.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HTTP代理服务器的设计与实现.doc

HTTP代理服务器的设计与实现 1、实验目的 熟悉并掌握Socket网络编程的过程与技术; 深入理解HTTP协议,掌握HTTP代理服务器的基本工作原理; 掌握HTTP代理服务器设计与编程实现的基本技能。 Internet的实验主机; Windows xp或Windows 7/8; 开发语言:C/C++(或Java)等 为了使浏览器访问网址时通过代理服务器,必须进行相关设置,以IE浏览器设置为例:打开浏览器(工具(浏览器选项(连接(局域网设置(代理服务器具体过程如图 图1-1 浏览器的代理服务器设置 (2)多线程使用 使用函数_beginthreadex创建子线程_endthreadex结束线程详情见CSDN 6、参考内容 代理服务器,俗称“翻墙软件”,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。如图1-2所示,为普通Web应用通信方式与采用代理服务器的通信方式的对比。 图1-2 Web应用通信方式对比 代理服务器在指定端口8080)监听浏览器的访问请求(需要在客户端浏览器进行相应的设置)接收到浏览器对远程网站的浏览求时,代理服务器开始在代理服务器的缓存URL对应的网页对象,找到对象后,代理服务器程序If-Modified-Since: 对象文件的最新被修改时间,并向Web服务器如果服务器没有该的缓存,则会,客户端,同时将缓存代理服务器程序会根据缓存的时间、大小和提取记录 本实验需实现一个简单的HTTP代理服务器,可以分为两个步骤:(首先请设置浏览器开启本地代理,注意设置代理端口与代理服务器监听端口保持一致)。 a) 单用户代理服务器 单用户的简单代理服务器可以设计为一个非并发的循环服务器。首先,代理服务器创建HTTP代理服务的TCP主套接字,通过该主套接字监听等待客户端的连接请求。当客户端连接之后,读取客户端的HTTP请求报文,通过请求行中的URL,解析客户期望访问的原服务器IP地址;创建访问原(目标)服务器的TCP套接字,将HTTP请求报文转发给目标服务器,接收目标服务器的响应报文,当收到响应报文之后,将响应报文转发给客户端,最后关闭套接字,等待下一次连接。 b) 多用户代理服务器 多用户的简单代理服务器可以实现为一个多线程并发服务器。首先,代理服务器创建HTTP代理服务的TCP主套接字,通过该主套接字监听等待客户端的连接请求。当客户端连接之后,创建一个子线程,由子线程执行上述一对一的代理过程,服务结束之后子线程终止。与此同时,主线程继续接受下一个客户的代理服务。 参考代码 #include stdafx.h #include stdio.h #include Windows.h #include process.h #include string.h #pragma comment(lib,Ws2_32.lib) #define MAXSIZE 65507 //发送数据报文的最大长度 #define HTTP_PORT 80 //http服务器端口 //Http重要头部数据 struct HttpHeader{ char method[4]; // POST或者GET,注意有些为CONNECT,本实验暂不考虑 char url[1024]; // 请求的url char host[1024]; // 目标主机 char cookie[1024 * 10]; //cookie HttpHeader(){ ZeroMemory(this,sizeof(HttpHeader)); } }; BOOL InitSocket(); void ParseHttpHead(char *buffer,HttpHeader * httpHeader); BOOL ConnectToServer(SOCKET *serverSocket,char *host); unsigned int __stdcall ProxyThread(LPVOID lpParameter); //代理相关参数 SOCKET ProxyServer; sockaddr_in ProxyServerAddr; const int ProxyPort = 10240; //由于新的连接都使用新线程进行处理,对线程的频繁的创建和销毁特别浪费资源 //可以使用线程池技术提高服务器效率 //const int ProxyThreadMaxNum = 20; //HANDLE ProxyThreadHandle[ProxyThreadMaxNum] = {0}; //DWORD ProxyThreadDW[ProxyThreadMaxNum] = {0}; struct ProxyParam{ SOCK

文档评论(0)

czy2014 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档