用Socket类构建网页下载器

类别:.NET开发 点击:0 评论:0 推荐:
用Socket类构建网页下载器

作者:Tuenhai.com MSN: king#tuenhai.com

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.Tuenhai.com/

              什么时候用到Socket类
   Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。所谓“分层”,可以视为包含3个层次:请求/响应层、应用协议层、传输层。WebReqeust和WebResponse 代表了请求/响应层,支持Http、Tcp和Udp的类组成了应用协议层,而Socket类处于最底层——传输层。《用HttpWebRequest和正则表达式提取网页中的链接》http://www.Tuenhai.com/一文介绍了用请求/响应层来取得网页源代码。本文则用最底层的传输层来取得网页源代码。
  为什么要用Socket?或者什么时候要用到Socket?
  Socket 类为网络通信提供了一套丰富的方法和属性。 Socket 类允许您使用下面列出的任何一种协议执行异步和同步数据传输:

Ggp
网关到网关协议。 Icmp
网际消息控制协议。 Idp
IDP 协议。 Igmp网际组管理协议。 IP网际协议。 IPv6 网际协议 v6。 IpxIPX 协议。 ND网络磁盘协议(非正式)。 PupPUP 协议。 Raw原始 UP 包协议。 SpxSPX 协议。 SpxIISPX 版本 2 协议。 Tcp传输控制协议。 Udp用户数据文报协议。 Unknown未知协议。 Unspecified未指定的协议。

  当您需要开发功能复杂的网络程序时,您可能要用到Socket类。
  
  
              用Socket类取得网页源代码     
  先引入以下命名空间:

Imports System.Net
Imports System.Net.Sockets
Imports System.IO
Imports System.Text
Imports System.Text.Encoding

  tuenhai原来用C#来练习本文代码,C#严格区分大小写,且智能感知的功能显然不如VB.Net,代码虽然简洁了,但一开始不太适应。tuenhai想,MicroSoft真正主推的或许是VB.Net,不然为何不在C#中实现同VB.Net一样的智能感知功能?最终还是用VB.Net来写本文代码。

  初学者对Socket类的使用可能有点茫然,不要紧,先从简单的实例开始,实例调试成功,再去详细了解理论知识也不迟。

Private Sub btnHTML_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHTML.Click
  Dim serverIP As IPAddress = Dns.Resolve("http://www.Tuenhai.com").AddressList(0)
  ' Default Web Server Port = 80
  Dim Port As String = "80"
  Dim serverhost As New IPEndPoint(serverIP, Int32.Parse(Port))

  Dim clientSocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

  Try
    clientSocket.Connect(serverhost)

    If clientSocket.Connected = False Then
      MsgBox("Connect Error.", MsgBoxStyle.Critical, "HTTP")
      Exit Sub
    End If

    Dim httpReq As String = "GET / HTTP/1.0" & ControlChars.CrLf & ControlChars.CrLf

    clientSocket.Send(ASCII.GetBytes(httpReq))

    Dim buffer(1024) As Byte
    Dim byteCount As Int16 = clientSocket.Receive(buffer, buffer.Length, 0)

    txtHTML.Text = ASCII.GetString(buffer, 0, byteCount)

    Do While byteCount > 0
      byteCount = clientSocket.Receive(buffer, buffer.Length, 0)
      txtHTML.Text = txtHTML.Text & ASCII.GetString(buffer, 0, byteCount)
    Loop
  Catch ex As Exception
    MsgBox(ex.StackTrace.ToString(), MsgBoxStyle.Critical, "Exception")
  End Try
End Sub



  
网络资源:
Windows Socket 网络编程——套接字编程原理

Visual C#托管Socket的实现方法

C#网络编程初探

Visual C#.Net 网络程序开发-Socket篇

浅析C#中的套接字编程

                           http://www.Tuenhai.com
                2004年3月5日

 

    

  

 

Tuenhai简介:Tuenhai同学对儒释道医卜命相有一定研究,对网络及英语最感兴趣,于哲学最有心得.常人利已,圣人利他,我非圣人,取道中庸.希望与各位精英交流,MSN:king#tuenhai.com
我的网站: http://www.Tuenhai.com/

 

 

本文地址:http://com.8s8s.com/it/it40888.htm