.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
用Socket类构建网页下载器

作者:未知 来源:月光软件站 加入时间:2005-6-5 月光软件站

用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/

 

 




相关文章

相关软件