首页 VB网络编程中Winsock的使用-jy

VB网络编程中Winsock的使用-jy

举报
开通vip

VB网络编程中Winsock的使用-jyVB网络编程中Winsock的使用如同上面的内容所描述的,不论您使用UDP协议或是TCP协议,Winsock控件都可以允许与远程的设备连接,并且在相互之间交换数据。因此,依据上面的面熟而言,不论您使用的是哪一种协议都可以扮演主机端和客户端的角色。同时,当您在使用Winsock控件的过程中,这个控件不会显示在正在执行的窗体之中。换句话说,Winsock控件是在后台运行的一种控件。在执行过程之中,不会具有任何选用、可见的控件。那么该如何使用Winsock控件呢?它可以被应用在那些类型的应用程序之中呢?以下所列出的内容,...

VB网络编程中Winsock的使用-jy
VB网络编程中Winsock的使用如同上面的内容所描述的,不论您使用UDP协议或是TCP协议,Winsock控件都可以允许与远程的设备连接,并且在相互之间交换数据。因此,依据上面的面熟而言,不论您使用的是哪一种协议都可以扮演主机端和客户端的角色。同时,当您在使用Winsock控件的过程中,这个控件不会显示在正在执行的窗体之中。换句话说,Winsock控件是在后台运行的一种控件。在执行过程之中,不会具有任何选用、可见的控件。那么该如何使用Winsock控件呢?它可以被应用在那些类型的应用程序之中呢?以下所列出的内容,是这个控件可以应用的大致范围:*将客户端所收集的数据,传送给主机端。*点对点的文件传送。*聊天室应用程序。*电子公告栏。*voip(voiceoverTCP/ip)因此,当您希望建立上述类型的应用程序之前,必须要学习如何选用适合的协议类型。2-1如何选用适用的协议当您准备开始使用Winsock控件之前,首要的工作是如何选择适用的协议类型。如同先前所述的,您可以选择TCP协议或是UDP协议中的一种。但是这两种协议的差异点在哪里呢?虽然,它们同样可以使用在Internet或是Internet环境之中,但是主要的差异在于连接的状态。以下是这两种协议的特点说明:*TCP协议是属于面向连接的协议。所谓的面向连接协议是指——“在您可以交换数据之前,在两个终端设备之间必须连接成功”。同时,在网络的基础理论之中,都会特别强调TCP具有错误核对的功能。也就是说,在数据的传送过程中,如果发生错误或是数据无法传达对方时,TCP协议将会重复尝试着重新传送数据。因此,核对以及重新传送的能力,因此起传输效率会比Internet协议或是巨域网络协议差一些(netBIEUI、IPX、AppleTalk)。*UDP协议是属于无面向连接协议。这种协议为适用在两个设备之间,适用于信息传送以及数据的传输方面。但是在使用时,必须注意当你将信息送出时,对方可能已经离线,因而无法接收到数据,而您也无法实时察觉到对方已经离线。此外,使用UDP协议的最大数据传送量,完全取决于网络的传输量。因此,此种协议较为适用于局域网络。因此,当您在建立应用程序并且选用适当的协议之前,务必先依据应用程序使用的环境来选择适用的协议。2-2设置协议当已经选择好适当的协议之后,接下来,将必须要设置协议的类型。在VisableBasic之中,共有两种设置协议的方式:“修改属性窗口”以及“程序代码设置”。以下是这两种设置方式的说明。*修改属性窗口(见图2-1)*程序代码设置Winsock1.Protocol=sckTCPProtocol3.TCP连接的基础在使用TCP协议来建立应用程序的过程中,首先必须 决定 郑伟家庭教育讲座全集个人独资股东决定成立安全领导小组关于成立临时党支部关于注销分公司决定 应用程序是属于主机端是客户端来决定应用程序所扮演的角色问题。因此,在建立应用程序的过程中,如果您选择“主机端”时,主机端的Winsock控件必须将特定的连接端口号设置在监听模式之中。同时,在客户端提出连接的请求时,主机端可以允许客户端的连接请求,并且完成连接的程序。因此,一旦主机端与客户端连接成功之后,在这个部设备之间即可开始传送数据,以下的程序代码,具有TCP连接的基本聊天室功能。3-1TCP连接范例在此笔者只做简单的-程序介绍,♣frmserver窗体的设计内容如图3-1所示♣frmserver的程序代码privatesubform_load()‘设置本机连接端口的localport属性的内容‘请注意!必须是整体值tcpserver.LocalPort=2000‘将本机连接端口设置为监听模式tcpserver.ListenMe.Caption=”frmsever”Label1.Caption=”传送的文字“Label2.Caption=”接收的文字“‘打开frmclient窗体frmClient.Showendsubprivatesubtcpserver_connectionrequest(byvalrequestidaslong)‘如果tcpserver控件的状态目前不是处于关‘闭的状态时,在允许远程设备连接时,必须要关闭目前的控制的运行iftcpserver.state<>sckclosedthentcpserver..close‘允许远程设备使用必要的识别码(requestid)与主机进行连接tcpserver.acceptrequestidendsubprivatesubtxtsend_change()‘当txtsend控件的内容发生变化时,将txtsend控件的内容,通过tcpserver控件senddata方‘法,将txtsend控件的内容传送给frmclienttcpserver.senddatatxtsend.textendsubprivatesubtcpserver_dataarrival(byvalbytestotalaslong)‘声明即将接收的数据类型dimstrdataasstring‘调用tcpserver控件的getdata方法,将接收的数据以vbstring数据类型,存放在strdata变量之中。Tcpserver.getdatastrdata,vbstring‘将strdata变量的内容,存放在txtoutput控件之中。Txtreceive.text=strdataEndsud♣frmclient窗体的设计内容窗体的配置内容如图3-2♣程序的代码privatesubform_load()‘指定远程主机的ip地址。如果是localhost,代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 的ip地址为127.0.0.1,并且也代表本机。Tcpclient.RemoteHost=”localhost”‘设置本机连接端口的localport属性的内容‘请注意!必须是整体值tcpclient.remoteport=2000‘设置窗体的标题内容Me.Caption=”frmclient”Label1.caption=”传送的文字”Label2.caption=”接收的文字”Cmdconnect.caption=”与主机连接”EndsubPrivatesubcmdconnect_click()‘调用tcpclient控件的connect方法,来初始化与主机的连接请求tcpclient.connectendsubprivatesubtxtsend_change()‘当txtsend控件的内容发生变化时,立即调用tcpclient控件的senddata方法,将txtsend控件的内容传送给主机tcpclient.senddatatxtsend.textendsubprivatesubtcpclient_dataarrival(byvalbytestotalaslong)‘说明即将接收的数据类型dimstrdataasstring‘调用tcpclient控件的getdata方法,将接收的数据以vbstring数据类型存放strdata变量之中。Tcpclient.getdatastrdata,vbstring‘将strdata变量的内容,存放在txtoutput控件之中。Txtreceive.text=strdataEndsub♣程序的执行结果3-1-1如何允许更多客户端同时连接当您的应用程序架构是属于主从式架构时,一般来说,客户端应该不止一个而已。但是,如果每一个客户端使用的一组连接端口时,那么如果有100个客户端呢?如果有1000个客户端呢?那么究竟要增加多少个winsock控件呢?同时,也得要分成100(或是1000)组accept子程序,接着每一部客户端都必须记得固定的连接端口号。其实,您大可不必如此辛苦。您可以利用VisableBasic控件数组的方式并利用监听用的数组元素(一般都是索引值“0”),来触发ConnectRequest事件。接下来再利用判别控件数组元素的连接状态来进行远程客户端连接。以下的程序代码范例,就是如何让许多远程用户连接到同一个连接端口号的程序代码的 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 :privateconnmaxaslongprivatesubform_load()dimIasintegerconnmax=200sckserver(0).localport=1001sckserver(0).listenforI=1toconnmaxloadsckserver(i)nextendsubprivatesubsckserver_connectionrequest(indexasinteger,byvalrequestidaslong)dimIasintegeforI=1toconnmaxifsckserver(1).state=sckclosedthensckserver(I).acceptrequestidendifendifendsub在上述的程序范例中,将会建立一个具有“201”个元素的sckserver控件数组。接着,利用for。。。next循环的方式,来设置加载sckserver控件数组元素或是判断数组元素是否正在连接中进而允许客户端连接。至于sckserver控件数组总元素为“201”的原因在于——“connmax设置为200再加上sckserver(0),因此总元素数量为201”。4.UDP连接的基础在建立UDP的应用程序时,其过程会比TCP协议简单许多。这是由于UDP协议在数据传送之前,可以不需要特别明确的连接方式。但是,在上述的TCP连接方式之中,Winsocke控件必须设置在“监听(Linsten)”状态之下,同时在客户端准备与主机进行连接时,主机端也必须要使用Accept方法来允许客户端所要求的连接。反观在UDP协议方面,双方仅仅需要使用Bind方法,即可与对方连接并且传输数九,因此,UDP协议连接过程的处理方式确实比TCP简单许多。下面介绍使用UDP协议来传送信息的过程。4-1UDP的连接范例在此只做简单的介绍♣窗体frmPeerA的设计内容如图4-1所示♣窗体的程序代码PrivateSubForm_Load()′控件的名字为udpPeerAWithudpPeerA′重点:必须将RemoteHost的值修改为对方计算机的名字。RemoteHost=″PeerB″RemotePort=1001′连接的端口号。Bind1002′绑定到本地的端口。EndWithfrmPeerB.Show′显示第二个窗体。EndSubPrivateSubtxtSend_Change()′在键入文本时,立即将其发送出去。udpPeerA.SendDatatxtSend.TextEndSubPrivateSubudpPeerA_DataArrival(ByValbytesTotalAsLong)DimstrDataAsStringudpPeerA.GetDatastrDatatxtOutput.Text=strDataEndSub♣窗体frmpeerB的设计内容如图4-2所示♣窗体frmpeerB的程序代码PrivateSubForm_Load()′控件的名字为udpPeerB。WithudpPeerB′重点:必须将RemoteHost的值改为对方计算机的名字。RemoteHost=″PeerA″RemotePort=1002′要连接的端口。Bind1001′绑定到本地的端口上。EndWithEndSubPrivateSubtxtSend_Change()′在键入后立即发送文本。udpPeerB.SendDatatxtSend.TextEndSubPrivateSubudpPeerB_DataArrival(ByValbytesTotalAsLong)DimstrDataAsStringudpPeerB.GetDatastrDatatxtOutput.Text=strDataEndSub
本文档为【VB网络编程中Winsock的使用-jy】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
中式烹调师
暂无简介~
格式:doc
大小:134KB
软件:Word
页数:10
分类:互联网
上传时间:2022-07-07
浏览量:7