文逸首页 小文论坛 文逸博客 精华文章
 首页 | 新闻 | 论坛 | 博客 | 专题 | FTP | 金融 | 微博 | 图库 | MyHome | 搜索 | 登陆 | 注册 | 帮助 | 设为首页  ·在线人数: 1332

发表新帖 我的主页  用户登陆 返回上页 收藏本帖 文友爬行榜

标题:VB5.0环境下Internet应用程序的开发
[作者] dsj [发表时间] 2003/5/9 13:14:00  [回复] 2  [点击] 5451

 [作者] dsj   [头衔] 论坛坛主  [经验] 220862  [等级] 大主帅   [发帖] 15642   [回帖] 1366  [登陆] 7956
[发表时间] 2003/5/9 13:14:00  [楼主]
标题: VB5.0环境下Internet应用程序的开发
 
一.概述 

  Internet有强大的通信功能,如文件传送、远程登录、E-mail、Internet Phone和Internet Fax等,它使传统的电信产业发生了巨大变化。同时,它是一个大型信息资源库,所含信息不仅包罗万象,而且日新月异。尤其是WWW(World Wide Web)的出现使全球信息联成一体,并使千家万户可以随时共享这一人类伟大的资源。WWW的大规模兴起源于商业应用的普及和用户界面友好,越来越多的公司企业利用WWW网页作为商品促销或对客户服务的手段。不难想像,对于任何一位软件开发爱好者来说,学习开发Internet应用程序已经是一件刻不容缓的事情了。众所周知,使用Microsoft Visual Basic 5.0增强的Internet功能使我们能够在很短的时间内开发出实用的Internet网络应用程序,本文拟向读者介绍的就是有关这方面的内容。 

  Visual Basic是Microsoft公司面向Windows程序员的RAD(Rapid Application Development)工具,它的一大特点就是隐藏了很多纷繁而令人厌倦的Windows编程细节,而使开发人员将重点放在应用程序的功能上。当人们谈及Internet 应用程序的时候,由于类型太多,很难明确它们具体指的是什么,因此选择工具之前先了解所需要的应用程序类型是很重要的。Visual Basic为Internet的各种开发工作都提供了专门的技术,下表对Internet的各种用途进行了分类,并列举了完成各类任务所需的相应的Visual Basic工具。 

   

  表1. 

  Internet任务 Visual Basic工具 

  计算机间的直接通信 WinSock控件(MSWINSCK.OCX) 

  文件传输 Internet Transfer控件(MSINET.OCX) 

  Web浏览 WebBrowser控件(SHDOCVW.DLL) 

  在Microsoft Internet Explorer中运行的应用程序的开发 ActiveX文档 

  使用 Internet安装程序发布应用程序 Setup Wizard 

  用于超文本标记语言页面的组件开发 ActiveX控件 

  数据库应用程序 ActiveX文档 

   具有数据控件或使用ADODB对象的ASP 

   从服务器到客户机的事务/数据传输ASP 

   

  另一方面,随着WWW技术日新月异的发展,利用WWW技术构造企业内部网即Intranet,已经成为人们的一种共识,甚至Intranet应用程序的数量很可能已经超出了Internet应用程序,而本文描述的每项Internet任务同样也都适用于Intranet应用程序。 

  以下将通过实例分别讲述使用Visual Basic 5.0完成以下任务:①TCP(UDP)/IP编程;②创建Internet Explorer中运行的应用程序;③创建FTP浏览器。 

   

  二.TCP(UDP)/IP编程技术 

  TCP/IP协议是一种标准的企业网络协议,它也是Internet网最重要的网络互联协议,Microsoft Visual Basic 5.0的WinSock控件提供用于Internet的传输控制协议(TCP)和用户数据包网络协议(UDP)的底层访问,因而可以方便地用于创建通话应用程序,实现两台或多台联网计算机间的直接数据传输。下面介绍利用WinSock控件进行TCP/IP编程的主要步骤。 

  2.1 确定应用程序类型 

  使用TCP协议的应用程序,首先必须确定它是服务器端的还是客户端的。如果要创建一个服务器端的,就必须知道服务器计算机名或者IP地址(RemoteHost属性),还要知道进行“侦听”的端口(RemotePort属性),然后调用Connect方法。如果创建客户端应用程序,就应设置一个收听端口(LocalPort属性)并调用Listen方法。当客户计算机需要连接时就会发生ConnectionRequest事件。为了完成连接,可调用ConnectionRequest事件内的Accept方法。建立连接后,任何一方计算机都可以收发数据。为了发送数据,需调用SendData方法。当接收数据时会发生DataArrival事件。调用DataArrival事件内的GetData方法就可获取数据。 

  2.2 创建一个TCP服务器(Socket服务器) 

  1)创建新项目。 

  在File菜单中单击New Project,打开New Project对话框,然后双击Standard EXE图标,即建立一个新项目,并进入开发环境。 

  2)将缺省窗体的名称改为frmServer。 

  将一个Winsock控件拖到窗体上,并将该控件的名字改为tcpServer。请注意其中的Protocol属性应为sckTCPProtocol。在窗体上添加两个TextBox控件。将第一个命名为txtSendData,第二个命名为txtOutput(如图2.1所示)。 

   

  (图2.1) 

   

  3)为窗体添加如下的代码。 

  Private Sub Form_Load() 

  `将LocalPort属性设置为整数后调用Listen方法。 

  tcpServer.LocalPort = 2000 

  tcpServer.Listen 

  End Sub 

  要创建服务器,首先设定一个服务器端口号,并开始侦听是否有客户请求连接。程序中,LocalPort属性为服务器端口号,最好大于1000,以避免冲突。另外,对于众所周知的端口号,我们称之为周知口,例如:端口80专用于Web服务。用Listen方法开始侦听。 

  Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long) 

  `检查控件的State属性是否为关闭的。 

  `如果不是,在接受新的连接之前先关闭此连接。 

  If tcpServer.State <> sckClosed Then tcpServer.Close 

  `接受具有requestID参数的连接。 

  tcpServer.Accept requestID 

  End Sub 

  当客户连接到本服务器时,产生ConnectRequest事件,在事件中接收客户的请求。 

  程序中的requestID参数表示客户请求连接的ID号,Accept方法接收一个请求连接。 

  Private Sub txtSendData_Change() 

  `名为 txtSendData 的 TextBox 控件中包含要发送的数据。用户往文本框中 

  `键入数据时,使用 SendData 方法发送输入的字符串。 

  tcpServer.SendData txtSendData.Text 

  End Sub 

  当我们需要向客户发送数据时,只需要调用SendData方法。 

  程序中使用SendData方法发送数据。 

  Private Sub tcpServer_DataArrival (ByVal bytesTotal As Long) 

  `为进入的数据声明一个变量。 

  `调用GetData方法,并将数据赋予名为txtOutput的TextBox的Text属性。 

  Dim strData As String 

  tcpServer.GetData strData 

  txtOutput.Text = strData 

  End Sub 

  当客户向本服务器发送的数据到达后,产生DataArrival事件,在事件中接收数据。 

  程序中的bytesTotal参数表示收到数据的总数,GetData方法接收数据。 

  Private Sub tcpServer_close(Index as Integer) 

  tcpServer.Close 

  tcpServer.Listen 

  End Sub 

  当客户关闭连接时,服务器会产生Close事件。在事件中关闭当前连接,重新开始侦听。其中使用Close方法关闭连接。当然服务器也可以主动调用Close方法关闭连接,例如在窗体关闭时关闭连接。 

  Sub frmServer_UnLoad(Cancel As Integer) 

  tcpServer.Close 

  End Sub 

  通过上面的步骤我们创建了一个简单的服务器端应用程序。为了使它能够工作,还必须为它创建一个客户端的应用程序。 

   

  2.3 创建一个 TCP客户端(Socket客户) 

  1)在项目中添加一个新的窗体,将其命名为frmClient。在窗体中添加一个Winsock控件,并将其命名为tcpClient。在frmClient中添加两个TextBox控件,将第一个命名为txtSend,第二个命名为txtOutput。在窗体上放一个CommandButton控件,并将其命名为cmdConnect。 

  2)将CommandButton控件的标题改为“连接”。 

  3)在窗体中添加如下的代码。 

  Private Sub Form_Load() 

  `Winsock控件名字为tcpClient。 

  `注意:要指定远程主机,可以使用IP地址(例如:“121.111.1.1”), 

  `也可以使用计算机的别名,如下所示: 

  tcpClient.RemoteHost = "HostServer1" 

   tcpClient.RemotePort = 2000 

  End Sub 

  要创建客户连接服务器,首先要设置服务器主机名,如IP地址、域名或计算机名等,然后设定服务端口号,最后连接到服务器上。在程序中: 

  RemoteHost属性表示服务器主机名; 

  RemotePort属性表示服务器端口号。 

  Private Sub cmdConnect_Click() 

  `调用Connect方法,初始化连接。 

   tcpClient.Connect 

  End Sub 

  Connect方法连接到服务器; 

   

  Private Sub txtSendData_Change() 

   tcpClient.SendData txtSend.Text 

  End Sub 

   

  Private Sub tcpClient_DataArrival (ByVal bytesTotal As Long) 

   Dim strData As String 

   tcpClient.GetData strData 

   txtOutput.Text = strData 

  End Sub 

   

  Private Sub tcpClient_Close(Index As Integer) 

  tcpClient.Close 

  End Sub 

   

  至此,我们创建了一个简单的客户/服务器模式的应用程序。我们可以将两者都运行起来:运行项目,然后单击“连接”。在两个窗体之一的txtSendData文本框中键入文本,可以看到同样的文字将出现在另一个窗体的txtOutput文本框中(如图2.2所示)。 

  图2.2 

  2.4 创建多客户服务器,接受多个连接请求 

  上面设计的基本服务器只能接受一个连接请求。通过创建控件数组,使用一个控件也可以同时接受多个连接请求。利用这种方法,不再需要关闭连接,而只需创建新的控件实例(通过设置其索引属性),然后,在新的实例上调用Accept方法。 

  下面的代码假定名字为sckServer的窗体上有一个Winsock控件,它的Index属性被设置为0;控件是控件数组的一部分。在声明部分,声明了一个模块级的变量intMax。在窗体的Load事件中,intMax被设置为0,数组中第一个控件的LocalPort属性被设置为2000。然后调用控件的Listen方法,使之成为“侦听”控件。在连接请求到达时,代码将检测Index是否为0(“侦听”控件的值)。如果为0,侦听控件将增加intMax的值,并使用该号码来创建新的控件实例。然后使用新的控件实例接受连接请求。 

  Private intMax As Long 

  Private Sub Form_Load() 

   intMax = 0 

   sckServer(0).LocalPort = 2000 

   sckServer(0).Listen 

  End Sub 

  设定端口号后开始侦听。 

   

  Private Sub sckServer_ConnectionRequest (Index As Integer, ByVal requestID As Long) 

   If Index = 0 Then 

   intMax = intMax + 1 

   Load sckServer(intMax) 

   sckServer(intMax).LocalPort = 0 

   sckServer(intMax).Accept requestID 

   Load txtData(intMax) 

   End If 

  End Sub 

  在ConnectionRequest事件中,首先加载一个Socket控件,然后再用它来接收连接。 

   

  2.5 测试开发中应该注意的问题 

  1)协议的设置。 

  当WinSock控件与远程计算机建立连接时,亦可通过用户数据包协议(UDP)进行数据交换。在使用WinSock控件时,首先需要考虑使用什么协议。TCP应用程序应注意选择TCP协议。可按如下方式设置应用程序使用的协议:在“属性”窗口中单击“协议”,然后选择sckTCPProtocol或者sckUDPProtocol。也可以使用程序代码来设置Protocol属性,如下所示: 

  Winsock1.Protocol = sckTCPProtocol开发TCP应用程序应注意选择TCP协议。 

  2)注意确定“计算机的名字”。 

  计算机的名字用如下方式查找: 

  ①在计算机的“任务栏”上,单击“开始”。 

  ②在“设置”项中,单击“控制面板”。 

  ③ 双击“网络”图标。 

  ④ 单击“标识”选项卡。 

  ⑤ 在“计算机名称”框中可以找到计算机的名称。 

  上面找到的计算机名称可以作为RemoteHost属性的值。应用这一技术,我方便地完成了某企业信息管理系统,成功地实现了企业内部信息流的处理。虽然目前已有WWW浏览器、FTP等Internet互联网的应用工具,可以下载网上的信息,或实现网上工作站间的数据与文件的传输,但是用Windows Sockets则可方便地在用户自己设计的Windwos应用程序中通过Internet互联网传输数据,由于互联网的传输速度可以高达数十兆到数百兆比特每秒,因此,除了可以传递一般的文字、图形、声音等数据文件外,还可以用来传递实时的图像数据。 

   

  三.创建Internet Explorer中运行的应用程序 

  3.1 概述 

  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文件。 

  3.2 ActiveX 文档对象的重要属性 

  在讲述创建ActiveX 文档的具体方法之前,我们先研究一下ActiveX 文档对象的重要属性。每个用户文档包含一个内置的Hyperlink对象,可用它来进入URLs和访问Internet Explorer的文档高速缓存。NavigateTo方法大致等价于窗体的Show方法。 

  事件 Show:当浏览器显示文档时发生; 

   Hide:当浏览器离开文档时发生; 

  属性 HyperLink:用于导航对象; 

   HyperLink对象有三个重要方法: 

   GoBack:前一页面; 

   GoFoward:后一页面; 

   Navigateto:导航; 

  例如HyperLink.Navigateto "http:/www.pccomputing.com"可以导航至《电子与电脑》杂志的主页。 

  3.3 用Visual Basic创建ActiveX Document的具体步骤 

  我们将开发具有如下功能的应用程序:创建两个ActiveX文档页面,第一个要求访问者输入密码,按动按钮后,若密码正确则进入第二页面;第二页面可以导航至中国教育与科研计算机网的主服务器。 

  1)在File菜单中单击New Project来打开一个New Project对话框,然后双击ActiveX Document exe图标,即可建立一个新项目并进入开发环境。 

  2)在“用户文档”的第一个UserDocument上添加两个Label控件、一个TextBox和一个CommandButton(如图3.1所示)。 

  (图3.1)。 

  添加如下代码: 

  Private Sub Command1_Click() 

  `核对Text1的文本,如果正确,则转至第二个文档页面。 

  If Text1.Text = "690909" Then 

  Hyperlink.NavigateTo "d:\ActiveX文档\UserDocument2.vbd" 

  End If 

  End Sub 

  3)从菜单“项目”中选择“添加用户文档”,在工程项目中添加第二个UserDocument,然后在UserDocument2上添加一个CommandButton(如图3.2所示)。 

  (图3.2) 

  添加如下的代码: 

  Private Sub Command1_Click() 

  `按动按钮,导航至《电子与电脑》杂志主页。 

  Hyperlink.NavigateTo "http:///www.pccomputing.com"

  End Sub 

  4)编译文档。 

  5)使用Internet Explorer浏览器测试文档。 

  四.创建FTP浏览器 

  4.1 概述 

  FTP是Internet网上最早使用的文件传输程序。FTP的具体含义是文件传输协议(File Transfer Protocol),它是由支持Internet文件传输的各种规程所组成的集合。FTP的作用是使Internet用户能够将文件从一台计算机拷贝到另一台计算机,为实现Internet资源共享提供有力的保障。它不同于NFS(Network File System)和Netbios协议,一旦你要访问另一台计算机中的文件,任何时刻都要运行FTP,而且你只能拷贝文件到自己的机器中时来使用它。FTP是一种客户机/服务器结构,既需要客户机软件,又需要服务器软件。FTP客户机程序在用户计算机上执行,服务器程序在宿主计算机上执行。用户启动FTP客户机程序,通过输入户名和口令同远程主机上的FTP服务器建立连接,一旦成功,在Internet上用户计算机和宿主计算机之间就建立起一条命令链路(控制链路)。 

  4.2 用Visual Basic 5.0创建FTP浏览器的步骤 

  1) 我们将开发具有如下功能的应用程序:使用两个文本框和一个Internet Transfer控件。可在“地址”文本框中输入FTP服务器的URL(Uniform Resource Locator),然后从内容文本框中选择一个文件或目录。如果选择目录,则应用程序就会显示该目录。如果选择文件,则浏览器会将文件存于Windows Temp目录中。当用户按回车键时,“地址”文本框会通过设置Internet Transfer控件的URL属性并调用Execute方法来执行请求。当请求一个特定文件时,OpenURL方法实现相同的动作。然而,当你使用OpenURL方法返回目录的内容时,会返回指明目录内容的HTML源代码。 

  2)在File菜单中单击New Project,以便打开New Project对话框,然后双击“普通exe”图标,即建立一个新项目,并进入开发环境。 

  3)在窗体上添加一个Label控件、一个TextBox和一个ListBox(如图4.1所示)。 

  图4.1 

  4)添加如下代码: 

  Private Sub Text1_Click(KeyAscii As Integer) 

  If KeyAscii=Asc(vbCr) Then 

  KeyAscii=0 

  Text1.SelStart=0 

  Text1.SelLength=Len(Text1) 

  On Error goTo errOpenURL 

  InetBrowse.URL=Text1.Text 

  InetBrowse.Execute, "Dir" 

  Caption=inetBrowse.URL 

  End If 

  Exit Sub 

   ErrOpenURL: 

   Select Case Err.Number 

   Case icBadUrl 

   MsgBox"地址错误,请重新出入!" 

   Case icConnectFailed,icConnectionAborted,icCannotConnect 

   MsgBox"无法连入网络!" 

   Case icInetTimeout 

   MsgBox"连接超时!" 

   Case icExecuting 

   InetBrowse.Cancel 

  If inetBrowse.StillExecuting Then 

   Caption="不能取消请求!" 

   Else 

  Resume 

  End If 

  End Select 

  End Sub 

  当你提交一个请求时,设置错误陷阱很重要,尤其是icExecuting错误。Internet Transfer控件采用异步方式处理所有请求。然而,在同一时间仅能处理一个请求。如果你取消正在进行的请求,那么在重新开始前一定要检查StillExecuting属性。有些请求不能被取消,并且简单地使用Resume语句会导致死循环。 

  Private Sub List1_DblClick) 

  If List1.SelLength Then 

   If Right(List1.SelText1,1)="/" Then 

   Text1=Text1 & "/" Left(Text1.SelText,Text1.SelLength-1) 

  On Error goTo errBRowse 

  MsDir=Right(Text1.Len(Text1)-Len(inetBrowse.URL) 

  InetBrowse.Execute,"Dir"&msDir&"/*" 

  Else 

  MsDir=Right(Text1.Len(Text1)-Len(inetBrowse.URL))&"/"&""&msTempDir&List1.SelText 

  End If 

  End If 

  Exit Sub 

  ErrBrowse: 

  If Err=icExecuting Then 

   inetBrowse.Cancel 

   If inetBrowse.StillExecuting Then 

   MsgBox"不能取消请求!" 

  Else 

  Resume 

  End If 

  Else 

  Debug.Print Err&""&Err.Description 

  End If 

  End Sub 

   FTP命令用于在本地主机和远程主机间或两远程主机间传送文件。为了确保所传送的文件具有唯一的文件名,可使用一些选项来管理文件名,以便于适应接收主机的需要。用户能通过使用“anonymous”登录进行公共文件访问。 

   Internet Transfer控件的Books Online文档展示用于创建FTP浏览器的程序片段,这里就不再详细叙述了。 



分享到:

我的QQ群:500人财富群11470502;投资群5920530;资源群6648659;交友群5713862;娱乐群6925950。
我的博客:http://104508155.qzone.qq.com/

 [作者]bruce-dai [头衔] [经验]190 [等级]一等兵  [发帖]21  [回帖]0 [登陆]38
[发表时间]2003/8/24 16:21:28 [1楼]
hao   



 [作者]不是委员 [头衔] [经验]0 [等级]  [发帖]1  [回帖]0 [登陆]1
[发表时间]2003/9/10 10:16:29 [2楼]
good
 



2 条回复; 10 条/页;  1 / 1     第   ↑到页首
您未登陆,发帖前请填写:用户名 密码 注册新用户  
 回复: VB5.0环境下Internet应用程序的开发
排版
粗体斜体下划线居中飞翔文字移动文字发光文字阴影文字插入超级链接插入网页插入下载地址插入Email地址插入图片插入Flash插入RealPlay文件插入Media文件插入QuickTime影片插入背景音乐插入代码插入引用
插入表情:表情符号   使用帮助
内容 (8000字以内)
 
  关闭窗口  
[论坛列表]

小文诊所 创业经验
金融创新 家庭理财
居家旅行 国内资源
职业生活 配置应用
饮食文化 实盘记录
温情一刻 国外资源
法律频道 红旗社区
妇幼天地 商标标准
站务处理 蓝总看盘
奖励认证 开源软件
故障咨询 求助中心
公益活动 手机软件
网络经济 文史研究
期货专版 代理试用
网页制作 人才交流
分类广告 房产观澜
体育资讯 雅瑟风流
初学园地 美术贴图
股海风云 听风茶轩
管理学院

[今日热帖]

关于文逸 | 小文论坛 | 文逸博客 | 文逸金融 | 精华文章网站地图 | 联系我们 | 隐私保护
 Copyright© WWW.WONYEN.NET 2003 - 2021  闽ICP备09016518号-16   本站最高 10508 人同时在线,发生时间 2005-5-17 5:09:15 
 文逸科技 制作维护