用Socket类构建网页下载器

原创 2004年03月30日 19:16:00
用Socket类构建网页下载器

            
SunHai


   开发工具:Microsoft Visual Studio .NET 2003
   操作系统:Windows XP

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

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

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

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

  我原来用C#来练习本文代码,C#严格区分大小写,且智能感知的功能显然不如VB.Net,代码虽然简洁了,但一开始不太适应。我想,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://sunhai.tianyablog.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


与我联系:
我的QQ:  26624998
我的网站:http://sunhai.tianyablog.com
本文地址:http://www.csdn.net/Develop/read_article.asp?id=25281


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

Visual C#托管Socket的实现方法

C#网络编程初探

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


浅析C#中的套接字编程

                2004年3月5日

我的QQ:  26624998
我的网站:
http://blog.csdn.net/2066/

用Socket类构建网页下载器

 Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的...
  • bulbul2006
  • bulbul2006
  • 2006年09月14日 10:04
  • 709

mybatis_user_guide(7) SQL语句构建器类

【0】README 1)本文全文总结于  http://www.mybatis.org/mybatis-3/zh/statement-builders.html 【1】在Java代码中来动态...
  • PacosonSWJTU
  • PacosonSWJTU
  • 2016年06月20日 21:08
  • 746

mybatis系列-SQL语句构建器类(六)

SQL语句构建器类 问题 Java程序员面对的最痛苦的事情之一就是在Java代码中嵌入SQL语句。这么来做通常是由于SQL语句需要动态来生成-否则可以将它们放到外部文件或者存储过程中。正如你已经看...
  • xiangjai
  • xiangjai
  • 2016年12月21日 10:18
  • 829

mybatis-SQL语句构建器(七)

SQL语句构建器类 问题 Java程序员面对的最痛苦的事情之一就是在Java代码中嵌入SQL语句。这么来做通常是由于SQL语句需要动态来生成-否则可以将它们放到外部文件或者存储过程中。正如你已经看...
  • u012758088
  • u012758088
  • 2017年02月10日 14:27
  • 839

Python3爬虫之五网页下载器的几种方法【Python使用cookie模拟登录CSDN】

(1)直接请求 from urllib import request # 目标网址 url = "http://www.zhihu.com" # 直接请求 response = request....
  • u012050154
  • u012050154
  • 2017年09月05日 11:26
  • 311

python3.4.4实现网页爬虫基础之网页下载器三种方法

这是是慕课网《Python开发简单爬虫》中网页下载器的三种实现方法,课程用的是python2.7,这里用最新的3.4.4实现出来,分享给新人: import urllib.request from h...
  • sunflowerduidui
  • sunflowerduidui
  • 2016年04月03日 19:07
  • 2998

用c socket 方式下载网页

#include #include #include #include #include #include #include #include #include #include #include #...
  • gggxin
  • gggxin
  • 2006年01月25日 21:32
  • 3102

類再生與多形性

第6章 类再生“Java引人注目的一项特性是代码的重复使用或者再生。但最具革命意义的是,除代码的复制和修改以外,我们还能做多得多的其他事情。”在象C那样的程序化语言里,代码的重复使用早已可行,但效果不...
  • romans1981
  • romans1981
  • 2005年03月24日 15:19
  • 1288

socket http编程(用socket编程实现http网页下载)

72.HTTP下载 //HttpDownload.h #ifndef _HTTPDOWNLOAD_H #define _HTTPDOWNLOAD_H //#include "InitSock....
  • ccjjyy
  • ccjjyy
  • 2010年11月12日 14:22
  • 3540

Python 网页下载器和解析器

某教程网 python 爬虫视频 http://www.imooc.com/learn/563 有段代码在3.X中有变化。在 3.x 版本中 ,把 2.x 版本的模块 urllib2 合并为 urll...
  • kk185800961
  • kk185800961
  • 2017年11月27日 00:52
  • 196
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Socket类构建网页下载器
举报原因:
原因补充:

(最多只允许输入30个字)