📄 m34.htm
字号:
</span></font></p>
<p> </span></font></p>
<p> 2.3 创建一个 TCP客户端(Socket客户)
</span></font></p>
<p> 1)在项目中添加一个新的窗体,将其命名为frmClient。在窗体中添加一个Winsock控件,并将其命名为tcpClient。在frmClient中添加两个TextBox控件,将第一个命名为txtSend,第二个命名为txtOutput。在窗体上放一个CommandButton控件,并将其命名为cmdConnect。
</span></font></p>
<p> 2)将CommandButton控件的标题改为“连接”。
</span></font></p>
<p> 3)在窗体中添加如下的代码。 </span></font></p>
<p> Private Sub Form_Load()
</span></font></p>
<p> 'Winsock控件名字为tcpClient。
</span></font></p>
<p> '注意:要指定远程主机,可以使用IP地址(例如:“121.111.1.1”),
</span></font></p>
<p> '也可以使用计算机的别名,如下所示: </span></font></p>
<p> tcpClient.RemoteHost
= "HostServer1" </span></font></p>
<p> tcpClient.RemotePort
= 2000 </span></font></p>
<p> End Sub </span></font></p>
<p> 要创建客户连接服务器,首先要设置服务器主机名,如IP地址、域名或计算机名等,然后设定服务端口号,最后连接到服务器上。在程序中:
</span></font></p>
<p> RemoteHost属性表示服务器主机名;
</span></font></p>
<p> RemotePort属性表示服务器端口号。
</span></font></p>
<p> Private Sub cmdConnect_Click()
</span></font></p>
<p> '调用Connect方法,初始化连接。
</span></font></p>
<p> tcpClient.Connect </span></font></p>
<p> End Sub </span></font></p>
<p> Connect方法连接到服务器; </span></font></p>
<p> </span></font></p>
<p> Private Sub txtSendData_Change()
</span></font></p>
<p> tcpClient.SendData
txtSend.Text </span></font></p>
<p> End Sub </span></font></p>
<p> </span></font></p>
<p> Private Sub tcpClient_DataArrival
(ByVal bytesTotal As Long) </span></font></p>
<p> Dim strData As String
</span></font></p>
<p> tcpClient.GetData strData
</span></font></p>
<p> txtOutput.Text = strData
</span></font></p>
<p> End Sub </span></font></p>
<p> </span></font></p>
<p> Private Sub tcpClient_Close(Index
As Integer) </span></font></p>
<p> tcpClient.Close </span></font></p>
<p> End Sub </span></font></p>
<p> </span></font></p>
<p> 至此,我们创建了一个简单的客户/服务器模式的应用程序。我们可以将两者都运行起来:运行项目,然后单击“连接”。在两个窗体之一的txtSendData文本框中键入文本,可以看到同样的文字将出现在另一个窗体的txtOutput文本框中(如图2.2所示)。
</span></font></p>
<p> <a
href="file:///C:/WINDOWS/Desktop/artical/pcccontent.html/pcc/98_12/images/12802.gif">图2.2</a>
</span></font></p>
<p> 2.4 创建多客户服务器,接受多个连接请求
</span></font></p>
<p> 上面设计的基本服务器只能接受一个连接请求。通过创建控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不再需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后,在新的实例上调用Accept方法。
</span></font></p>
<p> 下面的代码假定名字为sckServer的窗体上有一个Winsock控件,它的Index属性被设置为0;控件是控件数组的一部分。在声明部分,声明了一个模块级的变量intMax。在窗体的Load事件中,intMax被设置为0,数组中第一个控件的LocalPort属性被设置为2000。然后调用控件的Listen方法,使之成为“侦听”控件。在连接请求到达时,代码将检测Index是否为0(“侦听”控件的值)。如果为0,侦听控件将增加intMax的值,并使用该号码来创建新的控件实例。然后使用新的控件实例接受连接请求。
</span></font></p>
<p> Private intMax As Long
</span></font></p>
<p> Private Sub Form_Load()
</span></font></p>
<p> intMax = 0 </span></font></p>
<p> sckServer(0).LocalPort
= 2000 </span></font></p>
<p> sckServer(0).Listen
</span></font></p>
<p> End Sub </span></font></p>
<p> 设定端口号后开始侦听。 </span></font></p>
<p> </span></font></p>
<p> Private Sub sckServer_ConnectionRequest
(Index As Integer, ByVal requestID As Long) </span></font></p>
<p> If Index = 0 Then </span></font></p>
<p> intMax = intMax + 1
</span></font></p>
<p> Load sckServer(intMax)
</span></font></p>
<p> sckServer(intMax).LocalPort
= 0 </span></font></p>
<p> sckServer(intMax).Accept
requestID </span></font></p>
<p> Load txtData(intMax)
</span></font></p>
<p> End If </span></font></p>
<p> End Sub </span></font></p>
<p> 在ConnectionRequest事件中,首先加载一个Socket控件,然后再用它来接收连接。
</span></font></p>
<p> </span></font></p>
<p> 2.5 测试开发中应该注意的问题 </span></font></p>
<p> 1)协议的设置。 </span></font></p>
<p> 当WinSock控件与远程计算机建立连接时,亦可通过用户数据包协议(UDP)进行数据交换。在使用WinSock控件时,首先需要考虑使用什么协议。TCP应用程序应注意选择TCP协议。可按如下方式设置应用程序使用的协议:在“属性”窗口中单击“协议”,然后选择sckTCPProtocol或者sckUDPProtocol。也可以使用程序代码来设置Protocol属性,如下所示:
</span></font></p>
<p> Winsock1.Protocol =
sckTCPProtocol开发TCP应用程序应注意选择TCP协议。 </span></font></p>
<p> 2)注意确定“计算机的名字”。 </span></font></p>
<p> 计算机的名字用如下方式查找: </span></font></p>
<p> ①在计算机的“任务栏”上,单击“开始”。
</span></font></p>
<p> ②在“设置”项中,单击“控制面板”。 </span></font></p>
<p> ③ 双击“网络”图标。 </span></font></p>
<p> ④ 单击“标识”选项卡。 </span></font></p>
<p> ⑤ 在“计算机名称”框中可以找到计算机的名称。
</span></font></p>
<p> 上面找到的计算机名称可以作为RemoteHost属性的值。应用这一技术,我方便地完成了某企业信息管理系统,成功地实现了企业内部信息流的处理。虽然目前已有WWW浏览器、FTP等Internet互联网的应用工具,可以下载网上的信息,或实现网上工作站间的数据与文件的传输,但是用Windows
Sockets则可方便地在用户自己设计的Windwos应用程序中通过Internet互联网传输数据,由于互联网的传输速度可以高达数十兆到数百兆比特每秒,因此,除了可以传递一般的文字、图形、声音等数据文件外,还可以用来传递实时的图像数据。
</span></font></p>
<p> </span></font></p>
<p> 三.创建Internet Explorer中运行的应用程序
</span></font></p>
<p> 3.1 概述 </span></font></p>
<p> Visual Basic 5.0版本是直接针对Internet的(也有人称是针对ActiveX的),Microsoft目前正在加紧开发用于WWW的Visual
Basic(估计Visual Basic 6.0必将具有这一功能)。Visual Basic包括一个称为用户文档的新容器类型。用户文档构成了Visual
Basic Document(也称ActiveX Document)文档的基础,并且生成的文档能够使用Microsoft Internet
Explorer 3.0以上版本在Internet上浏览(见图3.1)。利用这一功能我们可以方便地创建动态Web页面。必须指出的是:使用Visual
Basic创建的AcitveX Document与其他ActiveX Document略有不同。Visul Basic AcitveX
Document与Visual Basic窗体大致相同,能在ActiveX Document容器中使用,但我们不能像运行独立应用程序那样运行它们。用户文档与窗体非常相似,可以包括控件、显示消息框、处理数据以及调用其他组件。用户文档与窗体的区别主要表现在:⑴应用程序中的其他部分无法得到用户文档中的数据,不能从文档外部引用用户文档中的属性值。⑵给予用户文档的应用程序需要Internet
Explorer来运行,无法直接从Visual Basic中调试它们。⑶编译过的应用程序必须从HTM文件启动,它在显示VBD文件之前装入应用程序的代码组件。如果没有这个HTM文件,就不能启动编译过的EXE文件或从Internet
Explorer中查看VBD文件。 </span></font></p>
<p> 3.2 ActiveX 文档对象的重要属性
</span></font></p>
<p> 在讲述创建ActiveX 文档的具体方法之前,我们先研究一下ActiveX
文档对象的重要属性。每个用户文档包含一个内置的Hyperlink对象,可用它来进入URLs和访问Internet Explorer的文档高速缓存。NavigateTo方法大致等价于窗体的Show方法。
</span></font></p>
<p> 事件 Show:当浏览器显示文档时发生;
</span></font></p>
<p> Hide:当浏览器离开文档时发生; </span></font></p>
<p> 属性 HyperLink:用于导航对象;
</span></font></p>
<p> HyperLink对象有三个重要方法:
</span></font></p>
<p> GoBack:前一页面; </span></font></p>
<p> GoFoward:后一页面; </span></font></p>
<p> Navigateto:导航; </span></font></p>
<p> 例如HyperLink.Navigateto
"http:/www.pccomputing.com"可以导航至《电子与电脑》杂志的主页。 </span></font></p>
<p> 3.3 用Visual Basic创建ActiveX
Document的具体步骤 </span></font></p>
<p> 我们将开发具有如下功能的应用程序:创建两个ActiveX文档页面,第一个要求访问者输入密码,按动按钮后,若密码正确则进入第二页面;第二页面可以导航至中国教育与科研计算机网的主服务器。
</span></font></p>
<p> 1)在File菜单中单击New Project来打开一个New
Project对话框,然后双击ActiveX Document exe图标,即可建立一个新项目并进入开发环境。 </span></font></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -