利用VB进行服务器编程实例汇总Word文档下载推荐.docx
- 文档编号:3709378
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:17
- 大小:22.51KB
利用VB进行服务器编程实例汇总Word文档下载推荐.docx
《利用VB进行服务器编程实例汇总Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《利用VB进行服务器编程实例汇总Word文档下载推荐.docx(17页珍藏版)》请在冰点文库上搜索。
要创建客户连接服务器,首先设置服务器主机名,如IP地址、域名或计算机名,然后设置服务器端口,最后连接服务器。
建立一窗体,并向其增加一个Winsock控件(可在工程菜单中的部件项来添加此控件),取名为:
SockC1。
添加两文本框Text1,Text2,和一按钮Command1。
SockCl.RemoteHost=′127.0.0.1″
′表示服务器主机名
SockCl.RemotePort=2000
′表示服务器端口名
SockCl.Connect
′连接到服务器
EndSub
SockCl.Close
PrivateSubSockCl_Close()
PrivateSubSockCl_DataArrival(ByValbytesTotalAsLong)
SockCl.GetDatas′接收数据到文本框中
SockCl.SendDataText2.Text′向服务器发送数据
3.进行通信。
把这两个窗体分别编译成两个EXE文件,服务器Server.exe和客户Client.exe程序,并把它们分别安装在服务器端和客户端,这样就可以实现两者通信了。
VBSocket编程(Winsock控件创建TCP/IP客户机/服务器程序)
Winsock控件建立在TCP、UDP协议的基础上,完成与远程计算机的通信。
即使对TCP/IP不太熟悉的用户,使用该控件也可以在十几分钟内创建一个简单的客户机/服务器程序。
下面我们对Winsock控件的事件、方法、属性按其在程序中出现的顺序分别作详细的介绍,以便更好地理解程序源代码。
下面是Winsock控件的相关属性,方法和事件。
(略去一些暂用不到的)
*属性
-------------------------------------------------------------------------
LocalHostName|本地机器名
LocalIP|本地机器IP地址
LocalPort|本地机器通信程序的端口(0<
端口<
65536)
RemoteHost|远程机器名
RemotePort|远程机器的通信程序端口
state|连接的当前状态(文后有详细说明)
Protocal|使用TCP或UDP协议(这里我们选‘0-sckTCPProtocal’)
--------------------------------------------------------------------------
*方法
Listen
Listen方法用于服务器程序,等待客户访问。
格式:
Winsock对象.listen
Connect
Connect方法用于向远程主机发出连接请求
Winsock对象.connect[远程主机IP,远程端口]
Accept
Accept方法用于接受一个连接请求
Winsock对象.acceptRequestID
Senddata
此方法用于发送数据
Winsock对象.senddata数据
Getdata
用来取得接收到的数据
Winsock对象.getdata变量[,数据类型[,最大长度]]
Close
关闭当前连接
Winsock对象.close
*事件
----------------------------------------------------------------------------
Close|远程机器关闭连接时触发
Connect|连接建立好,可以进行通信时触发(客户端)
ConnectRequest|有请求连接到达时产生(服务器端)
DataArrival|有数据到达时触发
Error|发生错误时发生
SendProgress|数据传送进度
-----------------------------------------------------------------------------
服务器程序的实现过程是:
(1)服务器程序必须设置好LocalPort属性,作为侦听端口,该值为一个整数(只要是一个其它TCP/IP应用程序没有使用过的值即可)。
(2)使用Listen方法进入侦听状态,等待客户机程序的连接请求。
(3)客户机程序发出连接请求,使服务器程序产生ConnectionRequest事件,该事件得到一个参数requestID。
(4)服务器程序用Accept方法接受客户机程序的requestID请求。
这样,服务器程序就可以用SendData方法发送数据了。
Accept方法必须用上一步得到的requestID作为其参数。
(5)当服务器程序接收到数据时,产生DataArrival事件,参数BytesTotal包含接收到的数据字节数。
在该事件中,可以用GetData方法接收数据。
(6)如果接受到Close事件,则用Close方法关闭TCP/IP连接。
客户机程序的实现过程是:
(1)客户程序设置Remotehost属性,以便指定运行服务器程序的主机名,该字符串可在“控制面板|网络|标识|计算机名”中查到。
(2)设置RemotePort属性,以便指定服务器程序的侦听端口。
(3)使用Connect方法,向服务器提出连接请求。
(4)服务器接受客户机程序的请求,客户机程序产生Connect事件,就可以用SendData方法发送数据了。
(5)当客户机程序接收到数据时,产生DataArrival事件,参数BytesTotal包含接收到的数据字节数。
(6)如果接受到Close事件,则用Close方法关闭连接。
Winsock控件还有两个重要的属性,即Protocol和State。
Protocol设定使用的协议是TCP还是UDP:
取值sckTCPProtocol表示TCP,取值sckUDPProtocol则表示UDP。
因为Winsock控件的缺省设置是sckTCPProtocol,所以程序中并没有使用Protocol属性。
State属性反映的是当前TCP/IP的连接状态,取值如表1所示。
表1Winsock控件的State属性及其描述
常数值描述
SckClosed0缺省值,关闭
SckOpen1打开
SckListening2侦听
SckConnectionPending3连接挂起
SckResolvingHost4识别主机
SckHostResolved5已识别主机
SckConnecting6正在连接
SckConnected7已连接
SckClosing8同级人员正在关闭连接
SckError9错误
先在一台计算机上运行服务器程序,此时窗口上只有一个“退出”按钮。
再在另一台计算机上运行客户机程序,在“连接”按钮右边的文本框中输入服务器的主机名后单击“连接”按钮。
如果连接成功,则服务器和客户机程序窗口都会出现两个文本框。
这时,两端都可以在上面的文本框中输入文字,这些文字会立即在下面的文本框中出现。
服务器程序使用的控件如下:
(1)Command1:
退出按钮;
(2)textsend:
发送数据文本框;
(3)Winsockserver:
服务器Winsock;
(4)textget:
接收数据文本框。
服务器程序的界面如图所示。
服务器程序的源代码如下:
PrivateSubCommand1_Click()
End
EndSub
PrivateSubForm_Load()
textsend.Visible=False
textget.Visible=False
Winsockserver.LocalPort=1001
Winsockserver.Listen
PrivateSubtextsend_Change()
Winsockserver.SendDatatextsend.Text
PrivateSubWinsockserver_Close()
Winsockserver.Close
PrivateSubWinsockserver_ConnectionRequest(ByValrequestIDAsLong)
textsend.Visible=True
textget.Visible=True
IfWinsockserver.State<
>
sckClosedThenWinsockserver.Close
Winsockserver.AcceptrequestID
PrivateSubWinsockserver_DataArrival(ByValbytesTotalAsLong)
DimtmpstrAsString
Winsockserver.GetDatatmpstr
textget.Text=tmpstr
客户机程序使用的控件如下:
(2)Command2:
连接按钮;
(3)Winsockclient:
客户Winsock;
(4)Text1:
主机名文本框;
(5)Textsend:
(6)Textget:
接收数据文本框;
客户机程序的源代码如下:
PrivateSubCommand2_Click()
Winsockclient.Connect
Winsockclient.RemotePort=1001
Winsockclient.RemoteHost="
sccdsz"
PrivateSubText1_Change()
Winsockclient.RemoteHost=Text1.Text
Winsockclient.SendDatatextsend.Text
PrivateSubWinsockclient_Close()
Winsockclient.Close
PrivateSubwinsockclient_Connect()
Command2.Visible=False
PrivateSubwinsockclient_DataArrival(ByValbytesTotalAsLong)
DimtmpstrAsString
Winsockclient.GetDatatmpstr
1引言
随着网络通信的兴起与迅速发展,TCP/IP协议已成为计算机网络中最主要的传输协议,TCP/IP传输协议也越来越为人所熟知。
目前的Internet网就是基于TCP/IP协议的互联网络。
TCP/IP除了用于广域外,在局域网中也广泛应用。
TCP是传输控制协议,它提供了一种可靠的、面向会话连接的数据流服务,它可以在一个分组可能发生丢失、破坏、重复、延迟和乱序的不可靠物理网络之上通过确认、流控、复用同步等自动纠错技术提供一种可靠的进程间通信机制,从而充分保证用户数据传送的可靠和有序性。
使用TCP协议通信时,TCP建立并控制数据发送方与接收方的会话关系,当接收方正确收到数据后,必须向发送方发送确认信息。
如果发送方在指定时间内未能收到确认信息,将重发数据包。
IP指分组交换协议,是联网的主机之间定义数据包传送路由的规则,它的基本任务是通过网络传送数据报,各个IP数据报之间是相互独立的。
IP本身没有连接协议,在交换数据前不会建立会话关系。
IP收到数据后也不确认,发送方和接收方都不检测数据传输的正确性。
所以仅有IP是不可靠的,不能确保正确传输数据。
TCP与IP的组合则构成了功能完整的传输协议。
在TCP/IP网络应用中,多数网络应用程序是使用客户/服务器模型方式,客户向服务器发出服务请求,服务器作出应答响应,服务器通常在一个众所周知的地址侦听客户向服务器发出的请求,服务进程这时一直是处于休眠状态,直到有一个客户程序提出连接请求。
服务器作出应答,并为客户提供相应的服务。
客户/服务器模型最重要的特点是非对等相互作用,客户与服务器处于不平等的地位。
服务器拥有客户机所不具备的各种软硬件资源和运算处理能力,服务器提供服务,客户请求服务,这种模式适应了网络资源、运算能力、信息分布不均等现象,成为IP应用的主要模式。
Internet中的WWW、FTP、Telnet、E-mail等许多典型应用都是采用客户/服务器模型方式。
VisualBasic是Windows环境下简单、易学、高效的可视化编程语言开发系统,以其所见即所得的可视化界面设计风格和32位面向对象的程序设计等特点,已广泛地应用于各个领域,是很多计算机软件开发人员采用的开发工具。
VB不但提供了良好的界面设计能力,而且在网络通信方面的功能也很强。
采用VB开发网络通信应用软件十分方便,尤其软件界面设计非常便捷,编程工作量较小,开发周期短。
VisualBasic6.0中提供了Winsock控件,用于支持网络中两台以上计算机之间进行通信。
Winsock控件提供了多样化的属性和方法来实现网络通信。
通过设置Winsock控件属性及调用控件方法就能够实现TCP或UDP方式的网络通信。
因此,使用Winsock控件编写网络通信程序的过程,实际上就是设置Winsock控件属性和调用控件方法的过程。
利用这个控件,编程人员可以轻松地编写出TCP/IP客户服务器程序。
2Winsock控件
Winsock控件是不可视控件,它提供了访问TCP和UDP网络服务非常简便的途径,使编程人员开发客户/服务器应用程序时,不必了解TCP的细节或调用低级的WinsockAPIs函数,只通过设置Winsock控件的属性并调用其方法,就可直接连接到一台远程计算机进行,并可实现双向数据交换。
MicrosoftAccess、VisualBaisc、VisualC++或VisualFoxPro都可用其编写客户服务器程序。
如果访问TCP传输控制协议服务功能,则须建立连接并实现主机间点对点通信。
如果访问UDP数据文报协议功能,则不建立连接,发送数据将以广播方式上网传输。
3TCP/IP客户服务器程序设计方法
使用TCP/IP协议通讯,首先要指定通信方式为TCP方式,将Winsock控件的Protocol属性设置为sckTCPProtocol.然后,按TCP通信协议规定,先要申请建立网络连接,然后才能传输数据。
3.1服务器程序开始侦听网络
服务器程序窗体中有三个Winsock控件,Name分别为sckServer、sckBusy和sckListen.
其中sckListen是侦听控件;
sckBusy是;
sckServer连接控件。
侦听控件和连接控件不能是同一个Winsock控件。
服务器程序必须首先侦听网络,等待客户的连接申请,才有可能建立网络连接。
服务器程序开始侦听网络前,需要为侦听用(sckListen)控件的LocalPort属性设置通信接口,然后调用Listen方法。
服务器程序开始侦听网络的程序代码如下:
sckListen.LocalPort=4477sckListen.Listen'
侦听网络
3.2客户程序申请连接
当服务器程序已经启动运行并开始侦听网络后,在客户程序申请连接前,需要为客户Winsock控件的RemodeHost属性设置远程主机,为RemodePort属性设置通信接口,然后再调用Connect方法向服务器程序申请连接。
设置远程主机名,可以是计算机名也可是IP地址。
如果是主机计算机名,则需要系统翻译为相应的IP地址;
如果是主机IP地址,则直接进行连接。
申请连接的程序代码如下:
sckClient.Protocol=sckTCPProtocol'
设置协议为TCP方式
'
IP地址"
127.0.0.1"
代表本机,与本机的实际地址无关
sckClient.RemoteHost="
"
129.200.0.1"
设置远程主机接口号,该值必须与设置远程主机服务器程序的接口号一致
sckClient.RemotePort=4477
sckClient.Connect'
申请连接
3.3服务器程序应答连接请求
服务器程序启动侦听网络后,当客户程序执行Connect方法申请连接时,服务器程序的侦听控件(sckListen)触发ConnectionRequest事件,并传递连接请求句柄。
编程人员需要在该当事件程序中调用连接控件(sckServer)的Accept方法实现连接。
服务器程序应答连接的程序代码如下:
PrivateSubsckListen_ConnectionRequest(ByValrequestIDAsLong)
sckServer.AcceptrequestID'
应答连接请求
当服务器程序执行Accept方法建立连接后,客户程序中的接连控件将触发Connect事件通报连接完成,否则触发Error事件通报连接失败。
可以在该事件程序中加入连接后的处理程序。
如果要求服务器程序支持多用户连接,则需要创建Winsock控件数组,在连接时动态生成Winsock控件与客户程序建立连接。
程序代码应修改如下:
DimiAsLong
IfCurNumber<
MaxNumberThen'
MaxNumber为最大连接数,CurNumber为当前连接数
Fori=1ToCurNumber
IfsckServer(i).State=0Then'
判断是否有空闲Winsock控件
ExitFor
EndIf
Nexti
Ifi=CurNumberThen
CurNumber=CurNumber+1
i=CurNumber
LoadsckServer(i)'
动态加载Winsock控件
sckServer(i).AcceptrequestID
ExitSub
sckBusy.Close
sckBusy.AcceptrequestID
3.4传送数据
当服务器程序和客户程序连接成功后,可以开始传送数据。
建立连接后的服务器程序和客户程序都可以发送或接收数据。
当一方要发送数据时,调用SendData方法。
DimSendStrAsString
SendStr="
连接成功!
Winsock1.SendDataSendStr'
传送数据
如果一方发送了数据,在连接的另一方控件将产生Da
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 利用 VB 进行 服务器 编程 实例 汇总