学习目标
本章主要介绍的是VB提供的与网络有关的2个ActiveX控件:WebBrowser控件和WinSock控件。通过本章的学习,要求掌握这2个控件常用的属性、事件和方法,并通过本章的实例和项目,逐步掌握用VB编写网络程序的基本方法和技术。
实训项目
1.项目题目:一个简单的网页浏览器
2.项目要求:此程序应能浏览Internet上的网页,也可以显示本地机或局域网中的目录,应具有“后退”、“前进”、“停止”、“刷新”、“主页”、“搜索”等功能。
3.项目界面及其要求:
⑴程序启动后的界面如图10-1所示。

图10-1 一个简单的网页浏览器启动界面
⑵在地址栏中输入网址,然后按下回车,或单击【Go】按钮,可以打开指定的网页。单击【后退】,可以返回到上一个页面,如果当前页面是历史记录中的第一个页面,则【后退】按钮不可用;单击【前进】,可以恢复到刚才浏览过的页面,如果当前页面是历史记录中的最后一个页面,则【前进】按钮不可用;单击【停止】,可以终止正在打开的网页;单击【刷新】,可以重新下载当前网页;单击【主页】,可以打开主页;单击【搜索】,可以按指定关键词进行搜索。
⑶标题栏上显示网页的标题,状态栏上显示网页的状态和当前时间。
使用网页浏览器控件(WebBrowser)可以浏览Internet网上的网站,也可以浏览本地机或局域网中的目录。用户使用该控件提供的“后退”、“前进”、“停止”、“刷新”、“主页”、“搜索”等方法,可以快速便捷地创建出一个简单的、占用资源少的网页浏览器。
WebBrowser控件的常用属性有:
1.Busy属性
格式:
Object.Busy
说明:
如果正在浏览或下载网页,返回True,否则,返回False。在较长时间内,如果控件一直处于“忙”状态,可以使用Stop方法来终止浏览器的浏览或下载操作。
2.LocationName属性
格式:
Object.LocationName
说明:
如果网页浏览器包含的是网页,则返回网页的标题;如果是本地机或局域网上的目录或文件,则返回统一名称协议(Universal Naming Convention)格式的目录或文件。
3.LocationURL属性
格式:
Object.LocationURL
说明:
如果网页浏览器包含的是网页,则返回网页的URL;如果是本地机或局域网上的目录或文件,则返回统一名称协议(Universal Naming Convention)格式的目录或文件。例如,如果用户现在正在浏览本地机上的C盘,则执行Me.Caption = WebBrowser1.LocationURL后,在标题栏上显示的是“file:///C:/”。
4.Offline属性
格式:
Object.Offline=[True|False]
说明:
该属性返回或设置当前浏览器是否工作在脱机状态下。如果在脱机模式下(取True时),浏览器将从本地机上的临时Internet目录读出网页。默认值为False。
WebBrowser控件的常用方法有:
1.GoBack方法
格式:
Object.GoBack
功能:
返回到上次查看过的网页或目录。
说明:
浏览器控件保存有一份记载用户访问过网页的历史记录。通过CommandStateChange事件可以检测到用户是否可以按下“后退”按钮,如果事件的CSC_NAVIGATEBACK命令不可用,说明现在浏览的是历史记录中的第一条,则应该禁用此方法。
2.GoForward方法
格式:
Object.GoForward
功能:
返回到单击“后退”按钮前的网页或目录。
说明:
浏览器控件保存有一份记载用户访问过网页的历史记录。通过CommandStateChange事件可以检测到用户是否可以按下“前进”按钮,如果事件的CSC_NAVIGATEFORWARD命令不可用,说明现在浏览的是历史记录中的最后一条,则应该禁用此方法。
3.GoHome方法
格式:
Object.GoHome
功能:
返回到当前主页或起始页。
4.GoSearch方法
格式:
Object.GoSearch
说明:
可以打开在Internet Explorer的Option对话框中所指定的页面。
5.Navigate方法
格式:
Object.Navigate URL [Flags]
说明:
Navigate方法可以打开指定的网址或目录。其中,URL为指定的网址或目录,Flags为可选项,表10-1中列出了Flags的取值范围。
表10-1 Flags参数的取值范围
|
常量 |
取值 |
说 明 |
|
NavOpenInNewWindow |
1 |
在新窗口中打开网址或目录 |
|
NavNoHistory |
2 |
不允许将打开的网址或目录添加到历史记录中,新的网址或目录替换掉历史记录中的当前页 |
|
NavNoReadFromCache |
4 |
不允许从磁盘缓冲区读取要打开的网页 |
|
NavNoWriteToCache |
8 |
不允许将本次浏览的结果写入磁盘缓冲区 |
6.Refresh方法
格式:
Object.Refresh
说明:
Refresh方法可以重新下载当前网页。
7.Stop方法
格式:
Object.Stop
说明:
Stop方法终止任何正在浏览或下载的网页。
WebBrowser控件的常用事件有:
1.CommandStateChange事件
格式:
Private Sub object_CommandStateChange(ByVal Command As Long,ByVal Enable As Boolean)
说明:
当改变要浏览的对象时触发此事件。
参数Command的可能取值范围为:常量CSC_UPDATECOMMANDS表示浏览的对象发生了改变;CSC_NAVIGATEFORWARD表示【前进】按钮的状态发生了变化;CSC_NAVIGATEBACK表示【后退】按钮的状态发生了变化。
如果Command可用,参数Enable取True,否则取False。
2.NavigateComplete2事件
格式:
Private Sub object_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
说明:
当控件成功地转移到新位置后,触发此事件。
3.DownloadBegin事件
格式:
Private Sub object_DownloadBegin
说明:
当下载操作开始时触发此事件。在NavigateComplete2事件发生后,紧接着触发此事件。DownloadBegin事件表示WebBrowser控件窗口显示的是正在被下载的网页,该网页在全部下载完毕后,DownloadComplete事件将被触发。
4.DownloadComplete事件
格式:
Private Sub object_DownloadComplete
说明:
浏览操作完成、终止或失败时触发此事件。
5.ProgressChange事件
格式:
Private Sub object_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long)
说明:
该事件会在下载网页的过程中定时触发。参数Progress保存了当前已下载的数据总量,参数ProgressMax保存了将要下载的数据总量。
Winsock控件可以将网络上的计算机连接起来,并通过用户数据报文协议(UDP)或者传输控制协议(TCP)进行数据交换。这两种协议都可以用来创建客户与服务器应用程序。
编程人员不必了解TCP或UDP的细节,只需通过设置Winsock控件的属性并调用其方法就可轻易连接到一台远程机器上去,实现实时双向交换数据。
Winsock控件的主要用途是:
1.创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。
2.创建一个服务器应用程序,作为多个用户的数据的汇入点。
3.创建“聊天”应用程序。
1.TCP基础
数据传输协议允许创建和维护与远程计算机的连接。连接两台计算机就可彼此进行数据传输。
如果创建客户应用程序,就必须知道服务器计算机名或者IP地址(RemoteHost属性),还要知道进行“侦听”的端口(RemotePort属性),然后调用Connect方法。
如果创建服务器应用程序,就应设置一个收听端口(LocalPort属性)并调用Listen方法。当客户计算机需要连接时就会发生ConnectionRequest事件。为了完成连接,可调用ConnectionRequest事件内的Accept方法。
建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用SendData方法。当接收数据时会发生DataArrival事件。调用DataArrival事件内的GetData方法就可获取数据。
2.UDP基础
用户数据文报协议(UDP)是一个无连接协议。跟TCP的操作不同,计算机并不建立连接。另外UDP应用程序可以是客户机,也可以是服务器。
为了传输数据,首先要设置客户计算机的LocalPort属性。然后,服务器计算机只需将RemoteHost设置为客户计算机的Internet地址,并将RemotePort属性设置为跟客户计算机的LocalPort属性相同的端口,并调用SendData方法来着手发送信息。于是,客户计算机使用DataArrival事件内的GetData方法来获取已发送的信息。
Winsock控件的常用属性有:
1.LocalHostName属性
格式:
Object.LocalHostName
说明:
返回本地机器名。在设计时是只读的。
2.LocalIP属性
格式:
Object.LocalIP
说明:
返回本地机器的IP地址。在设计时是只读的。
3.LocalPort属性
格式:
Object.LocalPort =端口号
说明:
返回或者设置所用到的本地端口。
对客户来说,该属性指定发送数据的本地端口。如果应用程序不需要特定端口,则指定0为端口号。在这种情况下,控件将选择一个随机端口。在建立起连接之后,这就是用于TCP连接的本地端口。
对于服务器来说,这是用于侦听的本地端口。如果指定的是端口0,就使用一个随机端口。在调用了Listen方法后,属性就包含了已选定的实际端口。
在计算机之间常用端口0来动态地建立连接。
4.Protocol属性
格式:
Object.Protocol[=protocol]
说明:
返回或设置Winsock控件所使用的协议(TCP或UDP)。其中,protocol可以取常量sckTCPProtocol(TCP协议)或sckUDPProtocol(UDP协议)。
在能够重新设置属性之前必须用Close方法关闭控件。
5.RemoteHost属性
格式:
Object.RemoteHost =远程计算机的名称或地址。
说明:
返回或设置远程计算机,控件向它发送数据或从它那里接收数据。在指定该属性时,应更新URL属性来显示新值。如果更新URL的主机部分,则也要更新该属性来反映新值。
在调用OpenURL或Execute方法时也可改变RemoteHost属性。
6.RemotePort属性
格式:
Object.RemotePort = 端口号
说明:
返回或设置要连接的远程端口号,该属性的缺省值是80(HTTP,通常用于WWW连接)。
7.BytesReceived属性
格式:
object.BytesReceived
说明:
返回接收到的(当前在接收端缓冲区内的)数据的数量。使用GetData方法来获取数据。在设计时是只读的,而且是不可用的。
Winsock控件的常用方法有:
1.GetData方法
格式:
Object.GetData data
说明:
获取当前的数据块并将其存储在变体类型变量data中。
2.SendData方法
格式:
Object.SendData data
说明:
将数据发送给远程计算机。参数data表示要发送的数据。对于二进制数据应使用字节数组。
3.Listen方法
格式:
Object.Listen
说明:
创建套接字并将其设置为侦听模式。该方法仅适用于TCP连接。
4.Close方法
格式:
Object.Close
说明:
对客户机和服务器应用程序关闭TCP连接或侦听套接字。