1、第一节:Winsock 控件的介绍Winsock 控件的作用简单说就是可以用于两台或多台机器间通信,这里不多说这个控件的作用了,因为在以后的介绍中我们会了解到这个控件的强大功能的,如可以用来做聊天软件等废话不多说,来看看他有些什么重要的属性、方法和事件吧!在 VB6.0 中的工具箱里默认情况下是没有这个控件的,添加方法如下:在工具箱上右击,选择部件,然后在部件对话框中选择“Microsoft Winsock Control 6.0“,后确定即可。如果没有这个复选框的话,请点击浏览按钮后在打开的添加 ActiveX 控件对话框选择 MSWINSCK.ocx 后选择打开,再点确定即可。Winsoc
2、k 控件在工具箱中图标为 。Winsck 的主要属性:属性名 说明BytesReceived 返回接收的数据,可以用 GetData 方法来获取它LocalHostName 返回本机名LocalIP 返回本机 IPLocalPort 返回或设置本机所用的端口,如果为 0 则为随机产生Protocol 返回通信所用的协议RemoteHostName 返回通信对方的计算机名RemoteHostIP 返回通信对方的 IPState 返回 Winscok 的当前状态,取值如下 sckClosed(常量为 0):关闭状态 sckOpen(常量为 1):打开状态 sckListening(常量为 2):侦
3、听状态 sckConnectionPending(常量为 3):连接状态 sckResolvingHost(常量为 4):解析主机中 sckHostResolved(常量为 5):已解析主机 sckConnecting(常量为 6):正在连接 sckConnected(常量为 7):已经连接 sckClosing(常量为 8):客户端正在关闭 sckError(常量为 9):连接发生错误 Winsock 的主要方法:方法名 作用listen 使服务器程序处于侦听状态,等待客户端的连接请求connect 用于客户端向远程发送一个连接请求,语法:Winsock.connect IP,PortAcc
4、ept 用于服务器接收一个远程客户端的连接请求,语法:Winsock.Accept requestIDsendData 用于向远程发送数据,语法:Winsock.sendData 数据getData 用于接收远程发送来的数据,语法:Winsock.getData 变量Close 关闭通信Winsock 的主要事件:事件名 说明Connect 当服务器接收客户端请求时,服务端发生的事件DataArrival 有数据到达时发生的事件,可以在这个事件中来 getData 发送来的数据ConnectionRequest客户端用 Connect 方法时服务器发生的事件,可以在这个事件中来 Accept
5、一个连接请求SendProgress 发送数据中发生的事件,可以在这个事件中来标示当前已经发送多少数据SendComplete 发送数据完成发生的事件Error 通信发生错误时发生的事件Close 关闭通信时发生的事件这节我们详细介绍了 Winsock 控件的属性、方法和事件等,只要拥有这些,我们就可以编很多功能强大的软件了。在接下来的几课中我们将以实例来说明Winsock 的应用。第二节:Winsock 聊天器实例上一节我们介绍了 Winsock 控件,这节我们将以一个聊天器的实例来说说如何应运 Winsock 控件进行计算机之间的通信。我也做了一个聊天器,程序点击这里下载。这节课我们做了用
6、于通信的服务端和客户端,在制作他们之前,先看看服务端和客户端是如何设计的:(注:要复制本页代码时要注意去掉不正确的字符如?号)服务端的设计:1、设置好 localPort 作为侦听端口2、使用 listen 使服务端处在侦听状态3、客户端发出连接请求后触发 ConnectionRequest 事件4、在 ConnectionRequest 中用 Accept 方法来接收客户端的连接请求5、收发数据客户端的设计:1、设置 RemoteHost,即你要连接 IP2、设置好 RemotePort,即通信的端口号,要与服务端的一致3、使用 Connect 方法向服务端发出连接请求4、如果服务端同意连接
7、请求则触发 Connect 事件5、收发数据服务端的制作:界面如下:服务器设计第一、二步的实现(窗体的 Load 事件):Private Sub Form_Load()wskServer.LocalPort = 1024 1、设置好 localPort 作为侦听端口wskServer.Listen 2、使用 listen 使服务端处在侦听状态End Sub服务器设计第三、四步的实现(Winsock 的 Connect):Private Sub wskServer_ConnectionRequest(ByVal requestID As Long)If wskServer.State sckCl
8、osed ThenwskServer.Close 这里要先关闭,要不会报错wskServer.Accept requestID 4、在ConnectionRequest 中用 Accept 方法来接收客户端的连接请求End IfEnd Sub服务器设计第五步的实现:Private Sub cmdSend_Click()wskServer.SendData txtMessage.Text 发送数据 txtContent.Text = vbCrLf MSIE 6.0; Windows NT 5.1; SV1)Host: 127.0.0.1:124Connection: Keep-Alive你看第一
9、行就知道客户端要的是什么文件了。2、为什么在 wskServer 的 SendComplete 事件中要关闭服务器:回答这个问题你可以将 wskServer.Close 注释起来再次运行,你会发现要很久(或要刷新网页)才会有页面出现,这是因为如果服务一直在的话,那么浏览器以为服务的数据没有传完,就一直等待,所以要在传送完源代码时关闭服务器。3、能不能用 Winsock 做自己的浏览器:能。我们可以用 Winsock 下载网页的源代码,但在 VB 中我们有另一个功能更强大的控件来做我们的浏览器,将在下节中说明具体的做法。第四节:Winsock 制作多客户服务器 我们前面的程序都只说到使用 Win
10、sock 制作一对一的连接,实际上我们使用控件数组的话,那么可以制作一个多客户连接的服务器。不过本质上还是一对一,不过是服务器上不只一个 Windsock 而已。我们在窗体上放一个 Winsock,将他的 Name 改为 sckServer,index 属性改为0。然后就是代码了:clientCount As Integer 定义一个窗体级变量来记录客户的连接数。Private Sub Form_Load() clientCount = 0 sckServer(0).LocalPort = 2000 设置好侦听端口 sckServer(0).Listen 开始侦听 End Sub Privat
11、e Sub sckServer_ConnectionRequest (Index As Integer, ByVal requestID As Long) If Index = 0 Then clientCount = clientCount + 1 客户请求多一个Load sckServer(clientCount) 载入一个服务端为新增的客户服务sckServer(clientCount).LocalPort = 0 侦听端口为随机,不能设为 2000,因为有 sckServer(0)在使用了。sckServer(clientCount).Accept requestID 接受请求 End
12、 If End Sub看了代码明白了吧,所谓多客户服务器就是多个 Winsock 服务端在为客户服务而已,当然我们不用同步的时候也可以用一个 Winsock 来连续的关闭、连接来做多客户服务器也是可以的。第五节:Web 浏览器控件在 VB6.0 中 Web 浏览器控件是 WebBrowser,他的作用是让我们只要加入少量的代码,就能做出和 IE 功能一样强大的浏览器。(点击这里下载我制作的浏览器示例)将 WebBrowser 添加到工具箱方法是:添加“部件“中选择 Microsoft Internet Controls(SHDOCVW.dll),后点确定,WebBrowser 在工具箱的图标为:WebBrowser 的功能强大是由众多方法、属性和行为组成的,下面说下它的主要属性、方法和行为。WebBrowser 的主要属性:属性名 说明LocationURL 返回当 WebBrower 中网页的 URLLocationName 返回当 WebBrower 中网页的标题,即 HTML 中的Title 标记WebBrowser 的主要方法:方法名 作用Navigate 浏览网页。如:WebBrower.Navigate “http:/“GoBack 后退GoForward 前进GoHome 浏览主页GoSearch 打开搜索页面Refresh 刷新Stop 停止