ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:23.17KB ,
资源ID:4459756      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4459756.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用VB进行服务器编程实例讲解.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

利用VB进行服务器编程实例讲解.docx

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

2、xt1,Text2,和一按钮Command1。Private Sub Form_Load()SockServer.LocalPort = 2000 服务器端口号,最好大于1000SockServer.Listen 开始侦听End SubPrivate Sub Form_Unload(Cancel As Integer)SockServer.CloseEnd SubPrivate Sub SockServer_Close()SockServer.CloseEnd SubPrivate Sub SockServer_ConnectionRequest(ByVal requestID As Long

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

4、 .SendData Text2.TextEnd Sub2创建客户。要创建客户连接服务器,首先设置服务器主机名,如IP地址、域名或计算机名,然后设置服务器端口,最后连接服务器。建立一窗体,并向其增加一个Winsock控件(可在工程菜单中的部件项来添加此控件),取名为:SockC1。添加两文本框Text1,Text2,和一按钮Command1。Private Sub Form_Load()SockCl.RemoteHost =127.0.0.1表示服务器主机名SockCl.RemotePort = 2000 表示服务器端口名SockCl.Connect连接到服务器End SubPrivate S

5、ub Form_Unload(Cancel As Integer)SockCl.CloseEnd SubPrivate Sub SockCl_Close()SockCl.CloseEnd SubPrivate Sub SockCl_DataArrival(ByVal bytesTotal As Long)Dim s As StringSockCl.GetData s 接收数据到文本框中Text1.Text = sEnd SubPrivate Sub Command1_Click()SockCl.SendData Text2.Text 向服务器发送数据End Sub3进行通信。把这两个窗体分别编

6、译成两个EXE文件,服务器Server.exe和客户Client.exe 程序,并把它们分别安装在服务器端和客户端,这样就可以实现两者通信了。VB Socket编程(Winsock控件创建TCP/IP客户机/服务器程序)Winsock控件建立在TCP、UDP协议的基础上,完成与远程计算机的通信。即使对TCP/IP不太熟悉的用户,使用该控件也可以在十几分钟内创建一 个简单的客户机/服务器程序。下面我们对Winsock控件的事件、方法、属性按其在程序中出现的顺序分别作详细的介绍,以便更好地理解程序源代码。 下面是Winsock控件的相关属性,方法和事件。(略去一些暂用不到的) *属性 - Loca

7、lHostName | 本地机器名 LocalIP | 本地机器IP地址 LocalPort | 本地机器通信程序的端口(0 端口 65536) RemoteHost | 远程机器名 RemotePort | 远程机器的通信程序端口 state | 连接的当前状态(文后有详细说明) Protocal | 使用TCP或UDP协议(这里我们选0-sckTCPProtocal) - *方法 - Listen Listen方法用于服务器程序,等待客户访问。 格式:Winsock对象.listen Connect Connect方法用于向远程主机发出连接请求 格式:Winsock对象.connect 远

8、程主机IP,远程端口 Accept Accept方法用于接受一个连接请求 格式:Winsock对象.accept Request ID Senddata 此方法用于发送数据 格式:Winsock对象.senddata 数据 Getdata 用来取得接收到的数据 格式:Winsock对象.getdata 变量 ,数据类型 ,最大长度 Close 关闭当前连接 格式:Winsock对象.close *事件 - Close | 远程机器关闭连接时触发 Connect | 连接建立好,可以进行通信时触发(客户端) ConnectRequest | 有请求连接到达时产生(服务器端) DataArriva

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

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

11、机程序的请求,客户机程序产生Connect事件,就可以用SendData方法发送数据了。 (5)当客户机程序接收到数据时,产生DataArrival事件,参数BytesTotal包含接收到的数据字节数。在该事件中,可以用GetData方法接收数据。 (6)如果接受到Close事件,则用Close方法关闭连接。 Winsock控件还有两个重要的属性,即Protocol和State。Protocol设定使用的协议是TCP还是UDP:取值 sckTCPProtocol表示TCP, 取值sckUDPProtocol则表示UDP。因为Winsock控件的缺省设置是sckTCPProtocol,所以程序中

12、并没有使用 Protocol属性。State属性反映的是当前TCP/IP的连接状态,取值如表1所示。 表1 Winsock控件的State属性及其描述 常数 值 描述 SckClosed 0 缺省值,关闭 SckOpen 1 打开 SckListening 2 侦听 SckConnectionPending 3 连接挂起 SckResolvingHost 4 识别主机SckHostResolved 5 已识别主机 SckConnecting 6 正在连接 SckConnected 7 已连接 SckClosing 8 同级人员正在关闭连接 SckError 9 错误 先在一台计算机上运行服务器

13、程序,此时窗口上只有一个“退出”按钮。 再在另一台计算机上运行客户机程序,在“连接”按钮右边的文本框中输入服务器的主机名后单击“连接”按钮。如果连接成功,则服务器和客户机程序窗口都会出 现两个文本框。这时,两端都可以在上面的文本框中输入文字,这些文字会立即在下面的文本框中出现。 服务器程序使用的控件如下: (1)Command1:退出按钮; (2)textsend:发送数据文本框; (3)Winsockserver: 服务器Winsock; (4)textget :接收数据文本框。 服务器程序的界面如图所示。 服务器程序的源代码如下: Private Sub Command1_Click()

14、End End Sub Private Sub Form_Load() textsend.Visible = False textget.Visible = False Winsockserver.LocalPort = 1001 Winsockserver.Listen End Sub Private Sub textsend_Change() Winsockserver.SendData textsend.Text End Sub Private Sub Winsockserver_Close() Winsockserver.Close End End SubPrivate Sub Win

15、sockserver_ConnectionRequest(ByVal requestID As Long) textsend.Visible = True textget.Visible = True If Winsockserver.State sckClosed Then Winsockserver.Close Winsockserver.Accept requestID End Sub Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long) Dim tmpstr As StringWinsockserver.GetD

16、ata tmpstr textget.Text = tmpstr End Sub 客户机程序使用的控件如下: (1)Command1:退出按钮; (2)Command2:连接按钮; (3)Winsockclient:客户Winsock; (4)Text1:主机名文本框; (5)Textsend:发送数据文本框; (6)Textget:接收数据文本框; 客户机程序的源代码如下: Private Sub Command1_Click() End End Sub Private Sub Command2_Click() Winsockclient.Connect End Sub Private Su

17、b Form_Load() textsend.Visible = False textget.Visible = False Winsockclient.RemotePort = 1001 Winsockclient.RemoteHost = sccdsz End Sub Private Sub Text1_Change() Winsockclient.RemoteHost = Text1.Text End Sub Private Sub textsend_Change() Winsockclient.SendData textsend.Text End Sub Private Sub Win

18、sockclient_Close() Winsockclient.Close End End Sub Private Sub winsockclient_Connect() textsend.Visible = True textget.Visible = True Command2.Visible = False End Sub Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long) Dim tmpstr As String Winsockclient.GetData tmpstr textget.Text = tmps

19、tr End Sub1 引言 随着网络通信的兴起与迅速发展,TCP/IP协议已成为计算机网络中最主要的传输协议,TCP/IP传输协议也越来越为人所熟知。目前的Internet 网就是基于TCP/IP协议的互联网络。TCP/IP除了用于广域外,在局域网中也广泛应用。 TCP是传输控制协议,它提供了一种可靠的、面向会话连接的数据流服务,它可以在一个分组可能发生丢失、破坏、重复、延迟和乱序的不可靠物理网络之上通过确认、流控、复用同步等自动纠错技术提供一种可靠的进程间通信机制,从而充分保证用户数据传送的可靠和有序性。使用TCP协议通信时,TCP建立并控制数据发送方与接收方的会话关系,当接收方正确收到数

20、据后,必须向发送方发送确认信息。如果发送方在指定时间内未能收到确认信息,将重发数据包。 IP指分组交换协议,是联网的主机之间定义数据包传送路由的规则,它的基本任务是通过网络传送数据报,各个IP数据报之间是相互独立的。IP本身没有连接协议,在交换数据前不会建立会话关系。IP收到数据后也不确认,发送方和接收方都不检测数据传输的正确性。所以仅有IP是不可靠的,不能确保正确传输数据。TCP与IP的组合则构成了功能完整的传输协议。 在TCP/IP网络应用中,多数网络应用程序是使用客户/服务器模型方式,客户向服务器发出服务请求,服务器作出应答响应,服务器通常在一个众所周知的地址侦听客户向服务器发出的请求,

21、服务进程这时一直是处于休眠状态,直到有一个客户程序提出连接请求。服务器作出应答,并为客户提供相应的服务。客户/服务器模型最重要的特点是非对等相互作用,客户与服务器处于不平等的地位。服务器拥有客户机所不具备的各种软硬件资源和运算处理能力,服务器提供服务,客户请求服务,这种模式适应了网络资源、运算能力、信息分布不均等现象,成为IP应用的主要模式。Internet中的WWW、FTP、Telnet、E-mail等许多典型应用都是采用客户/服务器模型方式。 Visual Basic是Windows环境下简单、易学、高效的可视化编程语言开发系统,以其所见即所得的可视化界面设计风格和32位面向对象的程序设计

22、等特点,已广泛地应用于各个领域,是很多计算机软件开发人员采用的开发工具。VB不但提供了良好的界面设计能力,而且在网络通信方面的功能也很强。采用VB开发网络通信应用软件十分方便,尤其软件界面设计非常便捷,编程工作量较小,开发周期短。 Visual Basic6.0中提供了Winsock控件,用于支持网络中两台以上计算机之间进行通信。Winsock控件提供了多样化的属性和方法来实现网络通信。通过设置Winsock控件属性及调用控件方法就能够实现TCP或UDP方式的网络通信。因此,使用Winsock控件编写网络通信程序的过程,实际上就是设置Winsock控件属性和调用控件方法的过程。利用这个控件,编

23、程人员可以轻松地编写出TCP/IP客户服务器程序。 2 Winsock控件 Winsock控件是不可视控件,它提供了访问TCP和UDP网络服务非常简便的途径,使编程人员开发客户/服务器应用程序时,不必了解TCP的细节或调用低级的WinsockAPIs函数,只通过设置Winsock控件的属性并调用其方法,就可直接连接到一台远程计算机进行,并可实现双向数据交换。Microsoft Access、Visual Baisc、Visual C+或Visual FoxPro都可用其编写客户服务器程序。 如果访问TCP传输控制协议服务功能,则须建立连接并实现主机间点对点通信。如果访问UDP数据文报协议功能,

24、则不建立连接,发送数据将以广播方式上网传输。 3 TCP/IP客户服务器程序设计方法 使用TCP/IP协议通讯,首先要指定通信方式为TCP方式,将Winsock控件的Protocol属性设置为sckTCPProtocol.然后,按TCP通信协议规定,先要申请建立网络连接,然后才能传输数据。 3.1服务器程序开始侦听网络 服务器程序窗体中有三个Winsock控件,Name分别为sckServer、sckBusy和sckListen. 其中sckListen是侦听控件;sckBusy是;sckServer连接控件。侦听控件和连接控件不能是同一个Winsock控件。 服务器程序必须首先侦听网络,等待

25、客户的连接申请,才有可能建立网络连接。服务器程序开始侦听网络前,需要为侦听用(sckListen)控件的LocalPort属性设置通信接口,然后调用Listen方法。服务器程序开始侦听网络的程序代码如下: sckListen.LocalPort=4477 sckListen.Listen 侦听网络 3.2客户程序申请连接 当服务器程序已经启动运行并开始侦听网络后,在客户程序申请连接前,需要为客户Winsock控件的RemodeHost属性设置远程主机,为RemodePort属性设置通信接口,然后再调用Connect方法向服务器程序申请连接。 设置远程主机名,可以是计算机名也可是IP地址。如果是

26、主机计算机名,则需要系统翻译为相应的IP地址;如果是主机IP地址,则直接进行连接。 申请连接的程序代码如下:sckClient.Protocol = sckTCPProtocol 设置协议为TCP方式IP地址127.0.0.1代表本机,与本机的实际地址无关sckClient.RemoteHost = 127.0.0.1129.200.0.1设置远程主机接口号,该值必须与设置远程主机服务器程序的接口号一致sckClient.RemotePort = 4477sckClient.Connect 申请连接 3.3服务器程序应答连接请求 服务器程序启动侦听网络后,当客户程序执行Connect方法申请连

27、接时,服务器程序的侦听控件(sckListen)触发ConnectionRequest事件,并传递连接请求句柄。编程人员需要在该当事件程序中调用连接控件(sckServer)的Accept方法实现连接。 服务器程序应答连接的程序代码如下:Private Sub sckListen_ConnectionRequest(ByVal requestID As Long)sckServer.Accept requestID 应答连接请求End Sub 当服务器程序执行Accept方法建立连接后,客户程序中的接连控件将触发Connect事件通报连接完成,否则触发Error事件通报连接失败。可以在该事件程

28、序中加入连接后的处理程序。 如果要求服务器程序支持多用户连接,则需要创建Winsock控件数组,在连接时动态生成Winsock控件与客户程序建立连接。程序代码应修改如下:Private Sub sckListen_ConnectionRequest(ByVal requestID As Long)Dim i As LongIf CurNumberMaxNumber Then MaxNumber为最大连接数,CurNumber为当前连接数For i = 1 To CurNumberIf sckServer(i).State = 0 Then 判断是否有空闲Winsock控件Exit ForEnd

29、 IfNext iIf i = CurNumber ThenCurNumber = CurNumber + 1i = CurNumberEnd IfLoad sckServer(i) 动态加载Winsock控件sckServer(i).Accept requestIDExit SubEnd IfsckBusy.ClosesckBusy.Accept requestIDEnd Sub 3.4传送数据 当服务器程序和客户程序连接成功后,可以开始传送数据。建立连接后的服务器程序和客户程序都可以发送或接收数据。当一方要发送数据时,调用SendData方法。Dim SendStr As StringSendStr = 连接成功!Winsock1.SendData SendStr 传送数据 如果一方发送了数据,在连接的另一方控件将产生DataArrival事件,在DataArr

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1