仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1098|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET编程:Visual C#完成HTTP代办署理服务程序

[复制链接]
第二个灵魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:34:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
C#中有两处地方用到new关键字,第一处也是最常见的一处是用在调用构造函数的时候,这种情况也是大家见的最多的一种。另一处是用在派生类中,作用有隐藏成员,切断继承关系等,相信第二处的用法大家明显要比第一处生疏。visual|程序  收集代办署理程序的品种十分多,依据代办署理服务程序代办署理的协定分歧,分红HTTP代办署理服务程序、FTP代办署理服务程序等,运转代办署理服务程序的服务器也就称为HTTP代办署理服务器和FTP代办署理服务器。在本节中先容的Web代办署理服务程序代办署理的就是HTTP协定。

  一.收集代办署理的范例及完成道理:

  收集代办署理服务依据事情条理,一样平常可分为使用层代办署理、传输层代办署理和SOCKS代办署理。使用层代办署理是事情在TCP/IP参考模子的使用层之上,它撑持对使用层协定(如HTTP,FTP)的代办署理。它供应的把持最多,可是不天真,必需要有响应的协定撑持。假如协定不撑持代办署理(如SMTP和POP),那就只能在使用层以下代办署理,也即传输层代办署理。传输层代办署理间接与TCP层交互,加倍天真。请求代办署理服务用具有部分真正服务器的功效:监听特定TCP或UDP端口,吸收客户真个哀求同时向客户端收回响应的呼应。另外一种代办署理必要改动客户真个IP栈,即SOCKS代办署理。它是可用的最壮大、最天真的代办署理尺度协定。SOCKV4同意代办署理服务器外部的客户端完整地毗连到内部的服务器,SOCKV5增添了对客户真个受权和认证,因而它是一种平安性较高的代办署理。本节前面先容的代办署理是一种使用层下面的代办署理,所代办署理的协定是HTTP,也就是常常见到的Web代办署理。

  收集代办署理就是一个毗连客户端(设定必要代办署理的盘算机)和服务器端(必要会见资本的服务器)的桥。要完成这类桥,收集代办署理就必需满意以下前提,实在也是代办署理服务的运转的流程:

  (1).可以吸收并剖析客户真个哀求。

  (2).创立到服务器的新毗连,并依据转发客户真个哀求信息。

  (3).吸收服务器反应的信息。

  (4).可以收回或注释服务器的呼应并将该呼应传回给客户端。

  图01是收集代办署理服务的一个典范模子图:


图01:代办署理服务的模子
  二.VisualC#完成Web代办署理服务程序

  Web代办署理服务是代办署理服务中最经常使用的一种代办署理服务,依照代办署理服务的条理,它属于使用层代办署理,是对TCP/IP参考模子中的使用层的HTTP协定的代办署理。

  Web代办署理服务也是代办署理服务中的一种,以是它也要满意代办署理服务的基础前提。鄙人面先容的代办署理服务程序中,是依照以下的按次来完成其功效的。

  (1).代办署理服务器程序侦听端口,吸收客户端扫瞄器发送来的Web哀求信息。

  (2).代办署理服务器程序吸收到客户端Web哀求信息后,剖析出Web服务器的地点,并创立一个Socket实例,并以此实例毗连Web服务器上。

  (3).经由过程创立的Socket传送客户真个Web哀求数据包到Web服务器的80端口。

  (4).代办署理服务器程序吸收Web服务器前往页面数据。

  (5).代办署理服务器程序把吸收来的数据传送到客户端,完成Web代办署理。

  因为客户真个对一个地点的扫瞄,要传送良多的Web哀求信息,为了更快、更正确的处置这些信息,Web代办署理服务程序接纳了多线程来处置每个Web哀求。仔细的读者大概会发明,处置每个客户真个Web哀求信息,代办署理服务器软件都要利用二个Socket,一个是用来吸收/传送客户机的信息,一个是和Web服务器举行交换。为了辨别这二个Socket,我们把他们都定名,和服务器对话的Socket,称为服务Socket;和客户端呆板对话的Scoket,称为客户Socket。

  上面就入手下手Web代办署理服务程序的编写事情。

  这个示例次要包括三个部份内容:

  ・创立一个Web代办署理类。

  ・Web代办署理服务的类的实例化。

  ・怎样经由过程这个Web代办署理类的实例完成Web代办署理服务。

  上面就是第一部分的详细的完成步骤。

  (一).创立一个Web代办署理类

  以下是详细的操纵步骤以下:

  1.起首启动VisualStudio.Net,顺次选择"文件"、"新建"、"项目"菜单后,在弹出"新建项目"对话框中将"项目范例"设置为"VisualC#项目",将"模板"设置为"Windows使用程序",在"称号"文本框中输出"WebProxy",在"地位"的文本框中输出"E:VS.NET项目",然后单击"断定"按钮。如许在"E:VS.NET项目"目次中就创立了一个新称号为"WebProxy"文件夹,内里寄存的就是"WebProxy"的项目文件。

  2.选择菜单【项目】|【增加类】,弹出【增加新项】对话框

  3.将【模板】设置【类】

  4.在【称号】文本框中输出【Proxy】,单击【翻开】按钮,详细如图02所示。


图02:Web代办署理项目中【增加新项】对话框

  5.在【办理计划资本办理器】窗口中,双击Proxy.cs文件,进进Proxy.cs文件的编纂界面。

  6.在Proxy.cs源文件的开首,增加以下代码,以下代码是导进Proxy.cs中要利用到的定名空间:

usingSystem;
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.Text;
usingSystem.IO;  7.用以下机关函数替换默许的机关函数。上面的代码是在Proxy类中创立一个机关函数。Proxy类只要一个机关函数,而且这个机关函数只要一个参数,这个参数是Socket工具,它次要用来和客户端举行数据互换,是一个客户Socket.。

publicProxy(Socketsocket)
{
 //
 //TODO:在此处增加机关函数逻辑
 //
 this.clientSocket=socket;
}
  8.创立Proxy类中的Run办法,Run办法是Proxy类中独一的办法。其功效是从客户端吸收HTTP哀求,并传送到Web服务器,然后从Web服务器吸收反应来的数据,并传送到客户端。为了完成这二个分歧方面的数据传送,Run办法中是经由过程二个Socket实例来完成的。在编写Run办法的时分,要注重上面几点:

  (1).因为HTTP是TCP/IP参考模子中的使用层协定,它创建于TCP协定之上,以是创立的Socket实例利用的协定范例应当为TCP协定。上面代码是创立能够传送HTTP哀求命令到Web服务器和吸收来自Web服务器反应来信息的Socket实例:

SocketIPsocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
  (2).别的一个Socket是在代办署理服务程序侦听端标语,吸收挂起的毗连哀求时分失掉的,以此Socket为参数,使用Proxy类中的机关函数,来创立一个Proxy实例的。此Socket完成从客户端吸收HTTP哀求信息,并传送数据到客户端。

  Socket创立和利用是完成Web代办署理软件的关头,详细完成办法是在机关函数代码前面,输出以下代码,创立Proxy类的Run办法:

publicvoidRun()
{
 stringclientmessage="";
 //寄存来自客户真个HTTP哀求字符串
 stringURL="";
 //寄存剖析出地点哀求信息
 intbytes=ReadMessage(read,refclientSocket,refclientmessage);
 if(bytes==0)
 {
  return;
 }

 intindex1=clientmessage.IndexOf();
 intindex2=clientmessage.IndexOf(,index1+1);
 if((index1==-1)||(index2==-1))
 {
  thrownewIOException();
 }
 stringpart1=clientmessage.Substring(index1+1,index2-index1);
 intindex3=part1.IndexOf(/,index1+8);
 intindex4=part1.IndexOf(,index1+8);
 intindex5=index4-index3;
 URL=part1.Substring(index1+4,(part1.Length-index5)-8);

 try
 {
  IPHostEntryIPHost=Dns.Resolve(URL);
  Console.WriteLine("远程主机名:"+IPHost.HostName);
  string[]aliases=IPHost.Aliases;
  IPAddress[]address=IPHost.AddressList;
  Console.WriteLine("Web服务器IP地点:"+address[0]);
  //剖析出要会见的服务器地点
  IPEndPointipEndpoint=newIPEndPoint(address[0],80);
  SocketIPsocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
  //创立毗连Web服务器真个Socket工具
  IPsocket.Connect(ipEndpoint);
  //Socket连Web接服务器
  if(IPsocket.Connected)
   Console.WriteLine("Socket准确毗连!");
  stringGET=clientmessage;
  Byte[]ByteGet=ASCII.GetBytes(GET);
  IPsocket.Send(ByteGet,ByteGet.Length,0);
  //代办署理会见软件对服务器端传送HTTP哀求命令
  Int32rBytes=IPsocket.Receive(RecvBytes,RecvBytes.Length,0);
  //代办署理会见软件吸收来自Web服务器真个反应信息
  Console.WriteLine("吸收字节数:"+rBytes.ToString());
  StringstrRetPage=null;
  strRetPage=strRetPage+ASCII.GetString(RecvBytes,0,rBytes);
  while(rBytes>0)
  {
   rBytes=IPsocket.Receive(RecvBytes,RecvBytes.Length,0);
   strRetPage=strRetPage+ASCII.GetString(RecvBytes,0,rBytes);
  }
  IPsocket.Shutdown(SocketShutdown.Both);
  IPsocket.Close();
  SendMessage(clientSocket,strRetPage);
  //代办署理服务软件往客户端传送吸收到的信息
 }
 catch(Exceptionexc2)
 {
  Console.WriteLine(exc2.ToString());
 }
}
//吸收客户真个HTTP哀求数据
privateintReadMessage(byte[]ByteArray,refSockets,refStringclientmessage)
{
 intbytes=s.Receive(ByteArray,1024,0);
 stringmessagefromclient=Encoding.ASCII.GetString(ByteArray);
 clientmessage=(String)messagefromclient;
 returnbytes;
}
//传送从Web服务器反应的数据到客户端
privatevoidSendMessage(Sockets,stringmessage)
{
 Buffer=newByte[message.Length+1];
 intlength=ASCII.GetBytes(message,0,message.Length,Buffer,0);
 Console.WriteLine("传送字节数:"+length.ToString());
 s.Send(Buffer,length,0);
}
  9.在界说Proxy类代码区中到场以下代码,以下代码是界说Proxy类中的利用的一些变量,这些变量次要是在前面的界说Run办法中利用。

SocketclientSocket;
Byte[]read=newbyte[1024];
//界说一个空间,存储来自客户端哀求数据包
Byte[]Buffer=null;
EncodingASCII=Encoding.ASCII;
//设定编码
Byte[]RecvBytes=newByte[4096];
//界说一个空间,存储Web服务器前往的数据
  10.至此,Proxy类的界说历程就完成了。把Proxy类实例化十分复杂,和之前用的其他完整一样,详细语法以下:

publicProxy(Socketsocket);
  参数:socket为一个Scoket实例

  上面代码是创立一个Proxy实例:

Proxyproxy=newProxy(socket);  (二).使用Proxy类,完成Web代办署理的详细示例:

  上面是使用下面创立的Proxy类,完成Web代办署理程序的详细完成步骤,Proxy类被界说在定名空间WebProxy中。

  1.在VisualStudio.Net的代码编纂器中翻开Class1.cs文件,进进Class1.cs的代码编纂界面。

  2.在Class1.cs源文件的开首导进以下定名空间:

usingSystem;
usingSystem.Net;
usingSystem.Net.Sockets;
usingSystem.Text;
usingSystem.IO;
usingSystem.Threading;
usingWebProxy;
//个中定名空间WebProxy是Proxy类所处的地位,详细能够参阅Proxy.cs源文件
//中定名空间的界说。
  3.在Main函数中增加以下代码,以下代码是使用Proxy类,来完成Web代办署理程序。

constintport=8000;
//界说端标语
TcpListenertcplistener=newTcpListener(port);
Console.WriteLine("侦听端标语:"+port.ToString());
tcplistener.Start();
//侦听端标语
while(true)
{
 Socketsocket=tcplistener.AcceptSocket();
 //并猎取传送和吸收数据的Scoket实例
 Proxyproxy=newProxy(socket);
 //Proxy类实例化
 Threadthread=newThread(newThreadStart(proxy.Run));
 //创立线程
 thread.Start();
 //启动线程
}
  保留下面的一切步骤,如许一个复杂Web代办署理程序就算是完成了。此Web代办署理程序侦听的是8000端标语。

  (三).测试Web代码程序:

  Web代办署理程序要经由过程二台盘算机才干够完成。个中的一台盘算机运转Web代办署理程序,充任Web代办署理服务器。别的一台盘算机充任客户机,经由过程Web代办署理服务器来扫瞄网页。在断定Web代办署理软件运转后,上面是对客户机举行需要的设置。

  1.翻开IE扫瞄器。

  2.选择【工具】|【Internet选项】,弹出【Internet选项】对话框。在此对话框当选择【毗连】页面,单击个中的【局域网设置】按钮。弹出【局域网(LAN)设置】对话框。选择【为LAN利用代办署理服务器(X),(这些设置不会使用于拨号和VPN毗连)】多选框。并在个中的【地点】文本框中输出代办署理服务器的IP地点,因为测试的代办署理服务器的IP地点为"10.138.198.213",一切也输出此IP地点,在【端口】文本框中输出"8000"。详细如图03所示:


图03:客户端设定Web代办署理服务器对话框
  此时客户真个设置就完成了,在断定IP地点为"10.138.198.213"的这台盘算机已运转下面先容的Web代办署理程序后。翻开客户真个IE扫瞄器,并输出要扫瞄的网址,就能够经由过程Web代办署理服务器来扫瞄网页了,图04是Web代办署理服务程序在服务器端运转时的界面。


图04:Web代办署理服务程序在服务器真个运转界面
  四.总结

  至此一个复杂的Web代办署理服务软件就算基础完成了,经由过程下面内容的先容可见,固然代办署理服务的完成道理绝对复杂,但详细完成实在仍是很烦琐的。收集代办署理是一个内容丰厚,完成庞大的论题,本节先容的代办署理服务软件,不管在完成的协定品种,仍是完成的功效,都只能算很小的一部分。但愿列位可以经由过程本文的先容,分离其他相干的常识,制造出功效更壮大、平安性更高,利用更不乱的收集代办署理服务程序来。对于new隐藏成员的作用,往往是出于使用了一个第三方类库,而你又无法获得这个类库的源代码,当你继承这个类库的某个类时,你需要重新实现其中的一个方法,而又需要与父类中的函数使用同样的函数,这是就需要在自定义的子类中把那个同名函数(或成员)加上new标记,从而隐藏父类中同名的成员。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-17 23:50:28 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
admin 该用户已被删除
板凳
发表于 2015-1-21 10:43:06 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
小女巫 该用户已被删除
地板
发表于 2015-1-30 15:45:22 | 只看该作者
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
活着的死人 该用户已被删除
5#
发表于 2015-2-6 13:52:47 | 只看该作者
平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
爱飞 该用户已被删除
6#
发表于 2015-2-16 08:54:39 | 只看该作者
在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?
山那边是海 该用户已被删除
7#
发表于 2015-3-5 02:41:28 | 只看该作者
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
第二个灵魂 该用户已被删除
8#
 楼主| 发表于 2015-3-11 22:46:41 | 只看该作者
平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
蒙在股里 该用户已被删除
9#
发表于 2015-3-19 15:45:48 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
乐观 该用户已被删除
10#
发表于 2015-3-28 21:20:37 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-3 05:18

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表