• 用C#实现Web代理服务器2


    三、C#实现Web代理服务程序

      经过了上面的介绍,我想大家对代理服务应该有了一个基本的认识,下面就让我们通过一个实例来深入体会一下如何用C#实现Web代理服务。Web代理服务的功能顺序是这样的:

      (1)侦听端口,等待客户端浏览器发送来的Web请求信息。
      (2)接收到客户端Web请求信息后,解析出目标Web服务器的地址,并创建一个Socket实例,并以此实例连接Web服务器上。
      (3)通过创建的Socket传送客户端的Web请求数据包到Web服务器的80端口。
      (4)接收Web服务器返回的页面数据。
      (5)把接收来的数据传送到客户端,从而实现Web代理。

      客户端对某个Web地址的浏览,可能要传送很多的Web请求信息(比如网页中的图像、Flash等),为了更快更准确地处理这些信息,Web代理服务程序通常采用多线程来处理每一个Web请求。细心的读者可能会发现,处理每一个客户端的Web请求信息,代理服务器软件都要使用二个Socket,一个是用来接收/传送客户机的信息,一个是和Web服务器进行交流。为了区分这二个Socket,我们把和服务器对话的称为“服务Socket”,和客户端机器对话的称为“客户Socket”。

      下面就开始Web代理服务程序的编写工作。这个实例包含三个部分内容:

      1.创建一个Web代理类。
      2.Web代理服务的类的实例化。
      3.如何通过这个Web代理类的实例实现Web代理服务。

      (一)创建一个Web代理类

      具体操作步骤如下:

      1.启动Visual Studio.Net,依次选择“文件”、“新建”、“项目”菜单后,在弹出“新建项目”对话框中将“项目类型”设置为“Visual C#项目”,将“模板”设置为“Windows应用程序”,在“名称”文本框中输入“WebProxy”,在“位置”文本框中输入“E:\VS.NET项目”,然后单击“确定”按钮,这样项目便建立好了。
      2.依次选择菜单“项目”、“添加类”,将弹出“添加新项”对话框。
      3.将“模板”设置为“类”。
      4.在“名称”文本框中输入“Proxy”,单击“打开”按钮,具体如图2所示:
      5.在“解决方案资源管理器”窗口中,双击Proxy.cs文件,进入Proxy.cs文件的编辑界
      6.在Proxy.cs源文件的开头,添加下列代码,下列代码是导入Proxy.cs中要使用到的命名空间:

      using System;
      using System.Net;
      using System.Net.Sockets;
      using System.Text;
      using System.IO;

      7.用下列构造函数替代默认的构造函数。下面的代码是在Proxy类中创建一个构造函数。Proxy类只有一个构造函数,并且这个构造函数只有一个参数,这个参数是Socket对象,它主要用来和客户端进行数据交换,是一个“客户Socket”:

      public Proxy(Socket socket)
      {
      //
      // TODO: 在此处添加构造函数逻辑
      //
      this.clientSocket = socket ;
      }

      8.在定义Proxy类代码区中加入下列代码,下列代码是定义Proxy类中的使用的一些变量,这些变量主要是在后面的定义Run方法中使用。

      Socket clientSocket;
      Byte[] read = new byte[1024];
      //定义一个空间,存储来自客户端请求数据包
      Byte [] Buffer = null;
      Encoding ASCII = Encoding.ASCII;
      //设定编码
      Byte[] RecvBytes = new Byte[4096];
      //定义一个空间,存储Web服务器返回的数据
  • 相关阅读:
    c++中sort等算法中比较操作的规则
    数据结构(c++)(1)-- 栈
    Problem 10: Summation of primes
    Problem 9: Special Pythagorean triplet
    Problem 7: 10001st prime
    Problem 8: Largest product in a series
    Problem 5: Smallest multiple
    Problem 6: Sum square difference
    Problem 4: Largest palindrome product
    Problem 3: Largest prime factor
  • 原文地址:https://www.cnblogs.com/leeairw/p/138984.html
Copyright © 2020-2023  润新知