Internet程序设计
在计算机文化基础课程中讲述过Internet的产生,发展过程,基本原理和主要功能.Internet上的一种主流应用模式就是浏览器/服务器(Browser/Server).
VB中提供了用于Internet程序设计的控件,常用的控件有Internet Transfer控件,Web Browser控件,WinSock控件,MAPISession控件和MAPIMessages控件等.
VB还提供了一个编写HTML页面的脚本语言VBScript,它是VB的一个子集.在HTML中嵌入VBScript代码可以完成很多仅用HTML完成不了的功能.
11.1 Internet Transfer控件
11.1.1 Internet Transfer控件的基本概念
选择协议
Internet Transfer控件实现了两个广泛应用的协议:超文本传输协议HTTP和文件传输协议FTP.用Internet Transfer控件,可以连接到使用这些协议的任何地方.使用Internet Transfer控件首先必须确定要选用的协议.
主要用途
用Internet Transfer控件可以完成以下几项任务:在应用程序中添加FTP浏览器;创建自动从公共FTP站点下载文件的应用程序;分析WWW站点中的图形参考,并只下载图形;提供自定义格式显示从Web站点获得的动态数据.
在工程中添加控件
用鼠标右键单击工具箱空白处,在弹出菜单中选"部件"菜单项,在选择部件窗口中选中该控件的ActiveX文件,如图11-1所示.
图11-1 在工程中添加Internet Transfer控件
基本操作
(1)将AccessType属性设置为合法的代理服务器.
(2)用合法的URL调用OpenURL方法.
(3)用合法的URL和协议支持的命令调用Execute方法.
(4)用GetChunk方法从缓冲区获取数据.
11.1.2 Internet Transfer控件的主要属性
接入方式AccessType属性
该属性用于设置控件采用的连接类型,是必须设置的属性.它的设置依赖于接入Internet的方式.设置AccessType属性的方法如下:
(1)如果在一个局域网(或者Intranet)内,可以通过一个代理服务器接入Internet,这时,将AccessType属性设为2-icNamedProxy.并把Proxy属性设置为代理服务器的名字或IP地址.
(2)如果是通过电话线或ISDN专线等方式接入Internet,则将AccessType属性设为1-icDirect.
(3)如果不能确定接入Internet的方式,但又可以使用浏览器浏览网页或使用其他的FTP软件下载文件,那么,将AccessType属性设为0-icUseDefault,使用注册表中缺省的连接方式.
控件忙StillExecuting属性
该属性描述Internet Transfer控件是否正在执行一项任务.属性值为True时,表示控件忙,例如正在下载或上载文件,属性值为False时,表示控件闲.该属性是一个只读属性,只能在运行时取得其值.
统一资源定位器URL属性
统一资源定位器URL(Uniform Resource Locator)唯一地确定一个Internet站点地址.该属性设置和返回Execute方法或OpenURL方法中要用到的URL.该属性中至少应该包含一个协议名称和计算机的名称,还可以包含目录和文件名.例如:
Inet1.URL = "http://www.cctv.com"
可以用Execute方法或OpenURL方法来改变URL属性的值,如果不调用这两个方法中的任何一个,改变URL属性的值并不能带来实质性的动作.
文档名Document属性
Document是一个文件名或一个文档名,这个文件或文档用于存储下载或上载的文件内容.如果Document属性没有设置,下载或上载的内容自动存储在与服务器上相应文件名相同的文件中.若Document属性的内容为空,且要下载的文档名为"http://www.cctv.com/abc.txt",则下载到本地计算机后,文档名就是abc.Txt.
用户名UserName属性和用户口令Password属性
如果要访问一个设置了口令保护的服务器,必须设置UserName属性和Password属性.如果要访问一个FTP服务器,且UserName属性和Password属性没有设置,那么,系统一般把UserName属性设为"anonymous","Password属性设为E-mail地址.
请求超时Requesttimeout属性
该属性设置连接服务器可以花费的最长时间.如果连接超过了这个时间,但却没有连通服务器,Internet Transfer控件就返回一个错误代码,报告连接失败.把这个属性设为0,就可以一直等待远程服务器的回应.
应答状态错误代码ResponseCode属性
在控件的StateChanged事件中,如果状态码为icError(11),控件就返回一个连接错误的代码存放在ResponseCode属性中.
应答状态错误信息ResponseInfo属性
当发生一个ResponseCode错误码的连接错误时,ResponseInfo属性描述了错误的详细内容.和ResponseCode属性配合,可以在StateChange事件中显示错误信息,例如:
Private sub Inet1_StateChange(ByVal Statecode As Integer)
Dim strMessage As String
Select Case Statecode
Case icError
StrMessage="ErrorCode:"& Inet1.ResponseCode & ":"&Inet1.ResponseInfo
Case Else
……
End Select
MsgBox strMessage
End Sub
11.1.3 Internet Transfer控件的常用方法
OpenURL方法
该方法打开URL参数指定的地址上的文档,并返回这个URL中的文档内容.OpenURL方法以同步方式工作.它返回的文档内容以两种方式存储,一种是字符串,一种是二进制字节流.OpenURL方法返回的具体文档内容取决于目的URL,若目的URL是HTML文档,则它返回HTML源代码(注意,并不是浏览器上看到的内容),例如:
Text1.Text = Inet1.OpenURL( http://www.cctv.com,0)
若目的URL是一个文本文件,则它返回的就是文件的文本,例如:
Text1.Text=Inet1.OpenURL( ftp://198.165.1.0/
d:/a.txt,0)
若目的URL是一个二进制文件(例如.Exe文件),则它返回的就是此文件的二进制字节流,必须把这个字节流保存到文件中,例如:
Sub DownloadFile()
Dim ReturnByteArray() As Byte
'声明一个字符数组用来接受二进制流.
Dim strURL = ftp://ftp.microsoft.com
/software.exe
Dim FileNo As Integer
'声明一个保存文件号的整型数.
FileNo = FreeFile
ReturnByteArray() = Inet1. OpenURL
(strURL,1)
Open "test.exe" For Binary Access
Write As# fileNo
Put #FileNo, ReturnByteArray()
Close #FileNo
End Sub
Execute方法
该方法执行一系列对远程服务器的请求命令,这些命令可以是接收文件,发送文件,甚至是删除远程服务器的目录.它是以异步方法工作的,该方法的语法格式如下:
Inet1.Execute,url, operation, data,
requestHeaders
四个参数都是可选的.它支持两种协议:HTTP和FTP.在HTTP协议下,Execute方法不仅可以上载和下载文件,还可以只传送一个文档的摘要信息而不传送整个文档.参数operation取值及其示例如表11.1所示.
若Execute方法工作在FTP协议下,data参数和requestHeaders参数是不需要的.进行FTP传输,主要是给出operation参数的具体内容. Operation 字符串的格式为:
operation file1, file2
FTP协议提供了大量的FTP命令,表11.2列出了最常用的一些FTP命令.
GetChunk方法
执行Execute命令后,会触发StateChange事件,如果Execute中的操作是Get(下载文件),而且 StateChange 事件中状态(State)变为icResponseCompleted(12)或icResponseReceived(8),那么就可以用GetChunk方法传输大块数据.
GetChunk方法的语法格式为:
GetChunk (size[,datatype])
GetChunk方法既可以返回一个字符串,也可以返回一个二进制字节流,取决于返回数据类型datatype的设置:icString(缺省的)和icByteArray.参数size表明数据传输的大小,一般这个值设为1024.如果和服务器的连接很慢或不够稳定,应把这个值设得小一点.如果和服务器的连接很快且很安全,可以把这个值设得大一点.
下面的例子在StateChanged事件中从FTP服务器中取得数据,然后显示在一个名为"txtData"的文本框中.
Private Sub Inet1_StateChanged(ByVal State As Integer)
Dim vtData As Variant
Dim strData As String: strData = ""
Dim bDone As Boolean: bDone = False
Select Case State
Case icResponseReceived
VtData = Inet1.Getchunk(1024,icString)
DoEvents
Do While Not bDone
StrData = strData & vtData
DoEvents
VtData = Inet.Getchunk(1024, icString)
If Len(vtData) = 0 Then
Bdone = True
End If
Loop
TxtData.Text = strData
End Select
End Sub
Cancel方法
该方法强制终止当前的操作并关闭当前的连接.在使用Cancel方法之前,最好检查一下StillExecuting属性是否为False,这就可以保证安全地断开连接.在某些情况下,可能希望只传输刚开始的某些字节,这就可以使用Cancel方法来强制结束这次传输并断开连接.
11.1.4 Internet Transfer控件的事件
Internet Transfer控件只触发一个事件:StateChanged事件.当用Execute方法或OpenURL方法向远程服务器发送一个请求命令后,服务器返回的任何响应导致状态改变都触发StateChanged事件.在此事件中出现如表11.3中列出的一些状态.
根据这些不同的状态,程序可以显示当前的状态信息,处理错误信息或者继续传输大块数据等.
因为OpenURL方法是以同步方式工作的,因此激发StateChanged事件可能导致重入问题.
11.1.5 用Internet Transfer控件登录到FTP服务器
FTP服务器有两种:公用的和私有的.公用服务器是对所有人开放的.而私有服务器只对授权用户开放.在这两种情况下,FTP协议都要求提供用户名和密码.
要登录到公用服务器,通常是以"anonymous"登录 (UserName=" anonymous"),然后用发送用户的电子邮件名称作为密码.然而使用Internet Transfer控件时,这一过程还能进一步简化.按照缺省规定,如果没有提供UserName和Password属性值,该控件将发送"anonymous"作为UserName,用户的电子邮件名称作为Password.
如果要登录到私有服务器,只需要适当地设置UserName,Password和URL属性,并调用Execute方法,如下面的代码所示.
With Inet1
.URL="ftp//ftp.myftpsite.com"
.UserName ="Zhangsan"
.Password="123456"
.Execute,"DIR" '返回该目录.
.Execute,"CLOSE" '关闭连接.
End With
在调用Execute方法之后,FTP连接仍旧打开着.这时可以继续使用Execute方法完成其它FTP操作,例如CD和GET等.如果会话已经完成,使用Execute方法执行CLOSE操作以断开连接.也可以通过改变URL属性,并调用OpenURL或Execute方法,自动关闭原来的连接,这样的操作会关闭当前FTP连接,并打开新的URL.
11.2 Web浏览器控件WebBrowser
11.2.1 浏览器控件WebBrowser的基本概念
主要用途
使用WebBrowser控件可以很轻松地创建自己的Web浏览器,这种浏览器可以用来完成如下两种任务:
(1)通过HTTP协议从WWW站点下载网页,放在控件窗口中供用户浏览.
(2)可以浏览本地计算机的桌面和"我的电脑"中的文件夹.
在工程中添加控件
用鼠标右键单击工具箱空白处,弹出菜单中选"部件"菜单项,在选择部件窗口中选中该控件的ActiveX文件,如图11-2所示.
图11-2 在工程中添加浏览器控件WebBrowser
.
11.2.2 浏览器控件WebBrowser的主要属性
定位资源的LocationURL属性
该属性返回浏览器控件中显示内容所属的URL名称.如果当前显示的是WWW上的HTML页面,那么它返回URL地址名称,如http:/www.cctv.com;如果当前显示的是本地计算机或局域网上的文件或文件夹,那么它和LocationName一样,返回全路径的文件名或文件夹,例如:File://D:/VB教程.
获取文件路径名的LocationName属性
该属性返回浏览器控件中显示的内容的名称.如果当前显示的是WWW上的HTML页面,那么它返回这一页的标题.如果当前显示的是本地计算机或局域网上的文件或文件夹,那么它返回的全路径的文件名或文件夹名.
表明浏览器忙的Busy属性
该属性表明浏览器控件是否正在连接站点或下载文件.当浏览器忙的时候,可以用Stop方法来强制停止当前的操作.
离线浏览Offline属性
该属性表明浏览器控件是否支持离线浏览.如果Offline属性值为False,浏览器控件每次都从服务器上下载最新页面;如果Offline属性值为 True,浏览器控件每次都从本地Cache的临时文件夹中读取HTML页面.
缺省注册RegisterAsBrowser属性
该属性表明是否把浏览器控件注册为当前缺省的浏览器.如果注册为缺省的浏览器,下次浏览页面就自动调用该浏览器进行浏览.
11.2.3 浏览器控件WebBrowser的常用方法
WebBrowser浏览器控件的方法可以完成Internet Explorer的大部分功能.主要方法如下(假设浏览器控件的名称是WebBrowser1):
向回翻页的GoBack方法
1.格式
WebBrowser1.GoBack
2.功能
在已浏览的页面中,浏览当前页面以前的一个页面.
向前翻页的GoForward方法
1.格式
WebBrowser1.GoForward
2.功能
在已浏览的页面中,浏览当前页面后面的一个页面.
返回主页的GoHome方法
1.格式
WebBrowser1.GoHome
2.功能
浏览本计算机默认的网站的主页(收藏夹-电台指南中保存的都是这个起始地址).
查找页面的GoSearch方法
1.格式
WebBrowser1.GoSearch
2.功能
按照Internet选项对话框中的设置搜索页面,并浏览搜索到的页面.
刷新页面的Refresh方法
1.格式
WebBrowser1.Refresh
2.功能
刷新当前页面.
资源定位的Navigate方法
1.格式
WebBrowser1.Navigate URLString
2.功能
浏览由参数"URLString"指定URL中的页面或指定路径中的文件.
3.示例
WebBrowser1.Navigate "d:\Vb教程\Web浏览器控件 \aaa.htm"
停止操作的Stop方法
1.格式
WebBrowser1.Stop
2.功能
停止当前浏览器的一切操作.
11.2.4 浏览器控件WebBrowser的常用事件
下载开始DownloadBegin事件
当Navigate方法被调用后,触发该事件.
下载完毕DownloadComplete事件
当全部页面下载完毕后触发该事件.
标题改变TitleChange事件
在URL的标题改变时,触发该事件.
建立新窗口NewWindow事件
当鼠标单击超文本链接的同时按住Shift键或者单击右键选超文本链接,并选择"在新窗口中浏览",浏览器就建立一个新窗口.建立了新窗口之后,触发该事件.
资源定位完毕NavigateComplete事件
当浏览器已连接到站点,并且下载了部分或全部页面内容时,触发该事件.
命令状态改变CommandStateChange事件
当浏览器的命令状态(后退,前进或其他命令)改变时,触发事件.
11.2.5 浏览器控件WebBrowser的应用示例
下面的程序示例创建一个自己的Web浏览器.首先开始一个标准EXE工程,再往工具箱中添加Microsoft Internet Control和Windows Common Controls,如图11-3所示.然后按如下步骤设计浏览器:
图11-3 添加公共控件对象
(1)把窗体命名为"Form浏览器".在窗体上加入一个WebBrowser控件,命名为"WebBrowser1",将其原始尺寸调整到与窗口的尺寸相适合的程度,当窗体改变尺寸时,用代码调整控件的尺寸.
(2)加入一个ImageList控件,命名为ImageList1.并准备6个图片,6个图片分别代表浏览器的"后退","前进","停止","刷新","主页"和"查找"操作,将这六个图片添加到ImageList1控件上.
(3)在窗体上添加一个工具条控件,命名为Toolbar1,并将该控件的ImageList属性设置为ImageList1,向工具条工件上添加六个按钮,按钮的关键字为"a","b","c","d","e"和"f",分别对应ImageList1上的六幅图片.
(4)在窗体上添加一个标签控件,命名为"Label1",将它的text属性设置为小四号字"地址".
(5)在窗体上添加一个下拉列表框控件,命名为"combo1",将它的text属性设置为小四号宋体字"D:\".
(6)在窗体上添加一个定时器控件.命名为"Timer1".
设计完成后的界面如图11-4所示.
图11-4 设计完成后的Web浏览器界面
INTRANET
文档说明:
相关文档
返回首页 | 关于本站 | | 友情链接 | 广告服务 | 意见建议 | 访客留言 | 本站论坛
Copyright© 2001-2006 ProgramBBS.com All Rights Reserved 版权所有©编程论坛
Email: 吉ICP备05009985号
感谢长春订餐网友情支持