利用VB进行服务器编程实例汇总_第1页
利用VB进行服务器编程实例汇总_第2页
利用VB进行服务器编程实例汇总_第3页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、现在大多数语言都支持客户-服务器模式编程,其中VB给我们提供了很好的客户-服务器编程方式。下面我们用VB来实现TCP/IP网络编程。TCP/ IP协议是In ternet 最重要的协议。VB提供了 Win Sock控件,用于在TCP/ IP 的基础上进行网络通信。当两个应用程序使用Socket进行网络通信时,其中一个必须创建Socket服务器侦听,而另一个必须创建 Socket客户去连接服务器。这样两个程序 就可以进行通信了。1创建服务器,首先创建一个服务端口号。并开始侦听是否有客户请求连接。建立一窗体,并向其增加一个 Win sock控件(可在工程菜单中的部件项来添加此控 件),添加两文本框

2、Text1,Text2,和一按钮Command1Private Sub Form_Load()SockServer.LocalPort = 2000'服务器端口号,最好大于 1000SockServer 丄iste n'开始侦听End SubPrivate Sub Form_Unl oad(Ca ncel As In teger)SockServer.CloseEnd SubPrivate Sub SockServer_Close()SockServer.CloseEnd SubPrivate Sub SockServer_C onn ectio nRequest(ByVal

3、requestID As Long)SockServer.CloseSockServer.Accept requestID'表示客户请求连接的ID号End Sub'当客户向服务器发送数据到达后,产生DataArrival事件,在事件中接收数 据,GetData方法接收数据。Private Sub SockServer_DataArrival(ByVal bytesTotal As Long)Dim s As Stri ngSockServer.GetData sText1.Text = sEnd Sub当我需要向客户发送数据时,只需调用Se ndData方法。Private S

4、ub Comma nd1_Click()SockServer .Se ndData Text2.TextEnd Sub2创建客户。要创建客户连接服务器,首先设置服务器主机名,如IP地址、域名或计算机名,然后设置服务器端口,最后连接服务器。建立一窗体,并向其增加一个 Win sock控件(可在工程菜单中的部件项来添加此控件),取名为:SockC1。添加两文本框 Text1,Text2,和一按钮Command1Private Sub Form_Load()SockCl.RemoteHost = ' "'表示服务器主机名SockCl.RemotePort

5、 = 2000'表示服务器端口名SockCl.Co nnect'连接到服务器End SubPrivate Sub Form_Unl oad(Ca ncel As In teger)SockCl.CloseEnd SubPrivate Sub SockCl_Close()SockCl.CloseEnd SubPrivate Sub SockCI_DataArrival(ByVal bytesTotal As Long)Dim s As Stri ngSockCl.GetData s'接收数据到文本框中Text1.Text = sEnd SubPrivate Sub Com

6、ma nd1_Click()SockCl.Se ndData Text2.Text'向服务器发送数据End Sub3进行通信。把这两个窗体分别编译成两个 EXE文件,服务器Server.exe和客户Clie nt.exe 程序,并把它们分别安装在服务器端和客户端,这样就可以实现两者通信 了。VB Socket编程(Winsock控件创建TCP/IP客户机/服务器程序)Win sock控件建立在TCR UDP协议的基础上,完成与远程计算机的通信。即使对TCP/IP不太熟悉的用户,使用该控件也可以在十几分钟内创建一个简单的客户机/服务器程序。下面我们对 Win sock控件的事件、方法、属

7、性按其在程序中出现的顺序分别作 详细的介绍,以便更好地理解程序源代码。下面是Win sock控件的相关属性,方法和事件。(略去一些暂用不到的)*属性LocalHostName |本地机器名LocalIP | 本地机器IP地址LocalPort |本地机器通信程序的端口 (0 <端口 <65536)RemoteHost |远程机器名RemotePort |远程机器的通信程序端口state | 连接的当前状态(文后有详细说明)Protocal |使用 TCP或 UDP协议(这里我们选 0 - sckTCPProtocal ')方法Liste nListen方法用于服务器程序,等

8、待客户访问。格式:Win sock 对象.liste nConnectConnect方法用于向远程主机发出连接请求格式:Win sock对象.conn ect 远程主机IP,远程端口 AcceptAccept方法用于接受一个连接请求格式:Win sock 对象.accept Request IDSen ddata此方法用于发送数据格式:Win sock对象.sen ddata 数据Getdata用来取得接收到的数据格式:Win sock对象.getdata 变量,数据类型,最大长度Close关闭当前连接格式:Win sock 对象.close*事件Close |远程机器关闭连接时触发Conne

9、ct |连接建立好,可以进行通信时触发(客户端)Conn ectRequest |有请求连接到达时产生(服务器端)DataArrival |有数据到达时触发Error |发生错误时发生Sen dProgress | 数据传送进度服务器程序的实现过程是:(1) 服务器程序必须设置好 LocalPort属性,作为侦听端口,该值为一个整数(只要 是一个其它TCP/IP应用程序没有使用过的值即可)。(2)使用Listen方法进入侦听状态,等待客户机程序的连接请求。(3) 客户机程序发出连接请求,使服务器程序产生ConnectionRequest事件,该事件 得到一个参数requestID。(4) 服务

10、器程序用Accept方法接受客户机程序的requestID请求。这样,服务器程序 就可以用SendData方法发送数据了。Accept方法必须用上一步得到的requestID作为 其参数。(5)当服务器程序接收到数据时,产生 DataArrival事件,参数BytesTotal包含接收到的数据字节数。在该事件中,可以用GetData方法接收数据。(6)如果接受到Close事件,则用Close方法关闭TCP/IP连接。客户机程序的实现过程是:(1) 客户程序设置Remotehost属性,以便指定运行服务器程序的主机名,该字符串 可在“控制面板|网络|标识|计算机名”中查到。(2)设置Remote

11、Port属性,以便指定服务器程序的侦听端口。(3)使用Connect方法,向服务器提出连接请求。(4) 服务器接受客户机程序的请求,客户机程序产生Connect事件,就可以用SendData 方法发送数据了。(5) 当客户机程序接收到数据时,产生 DataArrival事件,参数BytesTotal包含接收 到的数据字节数。在该事件中,可以用GetData方法接收数据。(6)如果接受到Close事件,则用Close方法关闭连接。Win sock控件还有两个重要的属性,即Protocol和State。Protocol设定使用的协议是 TCP还是 UDP 取值 sckTCPProtocol 表示

12、TCP,取值 sckUDPProtocol 则表示 UDP 因为 Win sock控件的缺省设置是sckTCPProtocol,所以程序中并没有使用 Protocol属性。State属性反映的是当前TCP/IP的连接状态,取值如表1所示。表1 Win sock控件的State属性及其描述常数值描述SckClosed 0缺省值,关闭SckOpe n 1 打开SckListe ning 2 侦听SckCo nn ectio nPen di ng 3 连接挂起SckReso Ivin gHost 4 识别主机SckHostResolved 5 已识别主机SckCo nn ecti ng 6 正在连接

13、SckConnected 7 已连接SckClosi ng 8 同级人员正在关闭连接SckError 9 错误先在一台计算机上运行服务器程序,此时窗口上只有一个“退出”按钮。再在另一台计算机上运行客户机程序,在“连接”按钮右边的文本框中输入服务器的主机名后单击“连接”按钮。如果连接成功,则服务器和客户机程序窗口都会出现两个文本框。这时,两端都可以在上面的文本框中输入文字,这些文字会立即在下面的文本框中出现。服务器程序使用的控件如下:(1)Command1退出按钮;(2)textsend :发送数据文本框;(3)Win sockserver :服务器 Win sock;(4) textget:接

14、收数据文本框。服务器程序的界面如图所示。服务器程序的源代码如下:Private Sub Comma nd1_Click()EndEnd SubPrivate Sub Form_Load()textse nd.Visible = Falsetextget.Visible = FalseWin sockserver.LocalPort = 1001Win sockserver.Liste nEnd SubPrivate Sub textse nd_Cha nge()Win sockserver.Se ndData textse nd.TextEnd SubPrivate Sub Win socks

15、erver_Close()Win sockserver.CloseEndEnd SubPrivate Sub Win sockserver_C onn ectio nRequest(ByVal requestID As Long)textse nd.Visible = Truetextget.Visible = TrueIf Win sockserver.State <> sckClosed The n Win sockserver.CloseWin sockserver.Accept requestIDEnd SubPrivate Sub Win sockserver_DataA

16、rrival(ByVal bytesTotal As Long)Dim tmpstr As Stri ngWin sockserver.GetData tmpstrtextget.Text = tmpstrEnd Sub客户机程序使用的控件如下:(1) Command1退出按钮;(2) Command2连接按钮;(3) Win sockclie nt :客户 Win sock;(4) Textl :主机名文本框;(5) Textsend :发送数据文本框;(6) Textget :接收数据文本框;客户机程序的源代码如下:Private Sub Comma nd1_Click()EndEnd S

17、ubPrivate Sub Comma nd2_Click()Win sockclie nt.C onn ectEnd SubPrivate Sub Form_Load()textse nd.Visible = False textget.Visible = FalseWin sockclie nt.RemotePort = 1001Win sockclie nt.RemoteHost = "sccdsz"End SubPrivate Sub Text1_Cha nge()Win sockclie nt.RemoteHost = Textl.TextEnd SubPriva

18、te Sub textse nd_Cha nge()Win sockclie nt.Se ndData textse nd.TextEnd SubPrivate Sub Win sockclie nt_Close()Win sockclie nt.CloseEndEnd SubPrivate Sub wi nsockclie nt_Conn ect()textse nd.Visible = Truetextget.Visible = TrueComma nd2.Visible = FalseEnd SubPrivate Sub wi nsockclie nt_DataArrival(ByVal

19、 bytesTotal As Long)Dim tmpstr As Stri ngWin sockclie nt.GetData tmpstrtextget.Text = tmpstrEnd Sub1引言随着网络通信的兴起与迅速发展,TCP/IP协议已成为计算机网络中最主要的传输协 议,TCP/IP传输协议也越来越为人所熟知。目前的In ternet网就是基于TCP/IP协议 的互联网络。TCP/IP除了用于广域外,在局域网中也广泛应用。TCP是传输控制协议,它提供了一种可靠的、面向会话连接的数据流服务,它可以 在一个分组可能发生丢失、破坏、重复、延迟和乱序的不可靠物理网络之上通过确认、 流控

20、、复用同步等自动纠错技术提供一种可靠的进程间通信机制,从而充分保证用户数 据传送的可靠和有序性。使用TCP协议通信时,TCP建立并控制数据发送方与接收方的 会话关系,当接收方正确收到数据后,必须向发送方发送确认信息。如果发送方在指定 时间内未能收到确认信息,将重发数据包。IP 指分组交换协议,是联网的主机之间定义数据包传送路由的规则,它的基本任务是通过网络传送数据报,各个IP数据报之间是相互独立的。IP本身没有连接协议,在 交换数据前不会建立会话关系。IP收到数据后也不确认,发送方和接收方都不检测数据 传输的正确性。所以仅有IP是不可靠的,不能确保正确传输数据。TCP与 IP的组合则 构成了功

21、能完整的传输协议。在TCP/IP网络应用中,多数网络应用程序是使用客户/服务器模型方式,客户向服 务器发出服务请求,服务器作出应答响应,服务器通常在一个众所周知的地址侦听客户 向服务器发出的请求,服务进程这时一直是处于休眠状态,直到有一个客户程序提出连 接请求。服务器作出应答,并为客户提供相应的服务。客户/服务器模型最重要的特点是非对等相互作用,客户与服务器处于不平等的地位。服务器拥有客户机所不具备的各 种软硬件资源和运算处理能力,服务器提供服务,客户请求服务,这种模式适应了网络 资源、运算能力、信息分布不均等现象,成为IP应用的主要模式。In ternet中的WWWFTR Tel net、E

22、-mail等许多典型应用都是采用客户/服务器模型方式。Visual Basic是Windows环境下简单、易学、高效的可视化编程语言开发系统,以 其所见即所得的可视化界面设计风格和 32位面向对象的程序设计等特点,已广泛地应 用于各个领域,是很多计算机软件开发人员采用的开发工具。VB不但提供了良好的界面设计能力,而且在网络通信方面的功能也很强。采用VB开发网络通信应用软件十分方便,尤其软件界面设计非常便捷,编程工作量较小,开发周期短。Visual Basic6.0 中提供了 Win sock控件,用于支持网络中两台以上计算机之间进 行通信。Win sock控件提供了多样化的属性和方法来实现网络

23、通信。通过设置Win sock控件属性及调用控件方法就能够实现 TCP或 UDP方式的网络通信。因此,使用 Win sock控件编写网络通信程序的过程,实际上就是设置 Win sock控件属性和调用控件方法的过 程。利用这个控件,编程人员可以轻松地编写出TCP/IP客户服务器程序。2 Win sock 控件Win sock 控件是不可视控件,它提供了访问TCP和UDF网络服务非常简便的途径,使编程人员开发客户/服务器应用程序时,不必了解 TCP的细节或调用低级的 Win sockAPIs函数,只通过设置 Win sock控件的属性并调用其方法,就可直接连接到一 台远程计算机进行,并可实现双向数

24、据交换。Microsoft Access、Visual Baisc、Visual C+或 Visual FoxPro都可用其编写客户服务器程序。如果访问TCP传输控制协议服务功能,则须建立连接并实现主机间点对点通信。如 果访问UDP数据文报协议功能,则不建立连接,发送数据将以广播方式上网传输。3 TCP/IP客户服务器程序设计方法使用TCP/IP协议通讯,首先要指定通信方式为 TCP方式,将Win sock控件的 Protocol属性设置为sckTCPProtocol.然后,按TCP通信协议规定,先要申请建立网络 连接,然后才能传输数据。3.1 服务器程序开始侦听网络服务器程序窗体中有三个 W

25、in sock控件,Name分别为sckServer、sckBusy和 sckListe n.其中sckListen 是侦听控件;sckBusy是;sckServer连接控件。侦听控件和连接 控件不能是同一个Win sock控件。服务器程序必须首先侦听网络,等待客户的连接申请,才有可能建立网络连接。服 务器程序开始侦听网络前,需要为侦听用(sckListen )控件的LocalPort属性设置通 信接口,然后调用Listen方法。服务器程序开始侦听网络的程序代码如下:sckListe n.LocalPort=4477 sckListe n丄 isten '侦听网络3.2 客户程序申请连

26、接当服务器程序已经启动运行并开始侦听网络后,在客户程序申请连接前,需要为客户 Win sock控件的RemodeHost属性设置远程主机,为 RemodePort属性设置通信接口, 然后再调用Connect方法向服务器程序申请连接。设置远程主机名,可以是计算机名也可是IP地址。如果是主机计算机名,则需要系统翻译为相应的IP地址;如果是主机IP地址,则直接进行连接。申请连接的程序代码如下:sckClient.Protocol = sckTCPProtocol ' 设置协议为 TCP方式'IP地址""代表本机,与本机的实际地址无关sckClie

27、 nt.RemoteHost = """"'设置远程主机接口号,该值必须与设置远程主机服务器程序的接口号一致sckClie nt.RemotePort = 4477sckClie nt.Co nn ect '申请连接3.3 服务器程序应答连接请求服务器程序启动侦听网络后,当客户程序执行Conn ect方法申请连接时,服务器程序的侦听控件(sckListen )触发ConnectionRequest事件,并传递连接请求句柄。编 程人员需要在该当事件程序中调用连接控件(sckServer )的Accep

28、t方法实现连接。服务器程序应答连接的程序代码如下:Private Sub sckListe n_Connection Request(ByVal requestID As Long) sckServer.Accept requestID '应答连接请求End Sub当服务器程序执行Accept方法建立连接后,客户程序中的接连控件将触发 Connect 事件通报连接完成,否则触发 Error事件通报连接失败。可以在该事件程序中加入连接 后的处理程序。如果要求服务器程序支持多用户连接,则需要创建Win sock控件数组,在连接时动态生成Win sock控件与客户程序建立连接。程序代码应修改

29、如下:Private Sub sckListe n_Connection Request(ByVal requestID As Long)Dim i As LongIf CurNumbervMaxNumber The n 'MaxNumber 为最大连接数,CurNumber为当前连接数 For i = 1 To CurNumberIf sckServer(i).State = 0 The n '判断是否有空闲 Win sock 控件Exit ForEnd IfNext iIf i = CurNumber The nCurNumber = CurNumber + 1i = Cu

30、rNumberEnd IfLoad sckServer(i)'动态加载 Win sock 控件sckServer(i).Accept requestIDExit SubEnd IfsckBusy.Close sckBusy.Accept requestIDEnd Sub3.4 传送数据当服务器程序和客户程序连接成功后,可以开始传送数据。建立连接后的服务器程 序和客户程序都可以发送或接收数据。当一方要发送数据时,调用Sen dData方法。Dim Sen dStr As Stri ngSendStr ="连接成功!"Win sock1.Se ndData Sen dS

31、tr '传送数据如果一方发送了数据,在连接的另一方控件将产生DataArrival事件,在DataArrival事件处理程序中需要调用GetData方法接收数据。接收数据类型必须与发 送数据的类型一致方可正确接收数据。接收数据的程序代码如下:Dim RecStr As Stri ngsckClie nt.GetData RecStrPrint RecStr3.5 关闭连接当应用程序结束数据传送后,必须关闭连接,释放系统资源。当连接的一方关闭连 接时,可以调用Close方法。关闭连接程序代码如下:sckClie nt.Close '关闭连接一方执行关闭连接后,在连接的另一方控件将

32、产生 Close事件。程序需要处理事件, 完成关闭连接的最后工作。该事件的处理代码如下:Private Sub sckServer_Close() sckServer(I ndex).Close ' 释放接连 Un load sckServer(I ndex)'删除控件End Sub4使用UDP通信方式程序设计方法UDP用户报文协议是一个无连接协议,与 TCP协议操作不同,UDP协议不使用报文 确认机制,不对报文排序,不进行流控,因而 UDF报文可能出现丢失、重复、乱序等现 象,但由于它的前期工作比TCP少,计算机不建立连接,因而可以迅速地展开通信,一 般用于传输少量不重要的数

33、据和信息。Win sock控件的UDP通信方式是一种广播方式,当UDP主机发送数据时,网络上所有其它主机都能收到数据,UDP通信比TCP方式简单, 由于UDF不需要连接,所以没有申请连接和关闭连接的过程。UDF发送者忽略接收者是否实际收到数据,而接收者也忽略发送者是否已发送了数据。这使编写UDP通信方式的网络程序非常简单。4.1设置服务器程序中 Win sock控件的属性在服务器程序中,需要为 Win sock控件的LocalPort属性设置通信接口: sckserver.LocalPort=44774.2客户程序发送数据当UDP主机要发送数据时,可调用 SendData方法。发送数据程序的代

34、码如下:Dim Sen dStr As Stri ngSendStr ="发送信息!"sckClie nt.Se ndData Sen dStr ' 传送数据vb映射已知服务器的方法VB设定/取消网络磁盘使用方法:建立连线Fun cti on AddC onn ectio n( ByVai RemoteLocati on As Stri ng,ByVaiLocalDriverAs Stri ng,ByVaiPasswdAsStri ng,ByVaiUserName AsStri ng) As Boolea nRemoteLocati on :为网络磁盘原始来源,格式

35、为RemoteComputerShareDirectoryLocalDriver :对应本机的磁盘代号,如:"H:"Passwd:存取网络磁盘的Password,传Null表示不用密码UserName:存取网络磁盘的使用者代号成功时传回True,否则为False例:CallAddCo nn ectio n( "Shihcmias","x:",vbNullStri ng,"cww")取消连线Fun cti on Can celC onn ectio n(ByVal LocalDriver As Stri ng, _B

36、yVaiForceCloseAs Boolea n) As Boolea nLocalDriver :对应本机的磁盘代号,如:"H:"ForceClose : True表示强迫结束连线,而不管有没有程式正与之连线成功时传回True,否则为False例:Call Ca ncelCo nn ectio n("x:", True)以下在.basOption ExplicitType NETRESOURCEdwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long lpLocalNam

37、e As Stri ng lpRemoteName As Stri ng lpComme nt As Stri ng lpProvider As Stri ngEnd TypeDeclareFun cti onWNetAddCo nn ectio n2Lib"mpr.dll"Alias"WNetAddCo nn ectio n2A"(lpNetResourceAsNETRESOURCE,ByVallpPasswordAsStri ng,ByVallpUserNameAsStri ng,ByValdwFlags AsLong) AsLo ngDeclare

38、Fun cti onWNetCa ncelCo nn ectio n2Lib"mpr.dll"Alias"WNetCa ncelCo nn ectio n2A" (ByVai IpName As String, ByVai dwFlagsAs Long, ByVai fForce As Long) As LongDeclareFu nctionWNetGetLastError Lib "mpr.dll"Alias"WNetGetLastErrorA" (lpError AsLon g,ByVal lpErrorBu

39、f AsStri ng, ByVal n ErrorBufSize As Long, ByVal lpNameBuf As Stri ng, ByVal nN ameBufSize As Lon g) As LongPublic Const RESOURCE_PUBLICNET = &H2Public Const RESOURCETYPE ANY = &H0Public Const RESOURCEDISPLAYTYPE_GENERIC = &H0Public Const RESOURCEUSAGE_CONNECTABLE = &H1Public Const CONNECT_UPDATE_PROFILE = &H1Public Function AddC onn ec

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论