




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在Visual Basic中使用WinSock控件的简单应用vb编程2009-11-13 09:58:29阅读23评论0字号:大中小 订阅Winsock控件对用户是不可视的,可以很容易地访问TCP和UDP网络服务。其可以被Microsoft Access,Visual Basic ,Visual C+或Visual FoxPro开发人员使用。 要编写客户和服务器应用程序 , 不需要了解TCP或调用底层WinsockAPI的具体细节。通过设置Winsock控件的属性和调用该控件的方法,可以很容易地 连接到远程计算机并进行双向的数据交换。属性BytesReceived属性,LocalHostNam
2、e属性,LocalIP属性,LocalPort属性,RemoteHost属性(ActiveX控件),SocketHandle属性,State属性(Winsock控件),Protocol属性(Winsock控件),Name属 性,Parent属性,RemoteHost属性(ActiveX控件),RemotePort属性(ActiveX控件),Index属性(ActiveX控件),Tag属性(ActiveX控件),Object属性(ActiveX控件)。方法Accept方法,Bind方法,Close方法(Winsock控件),Listen方法,PeerData方法,SendData方法,GetDa
3、ta方法(WinSock控件),GetData方法(ActiveX控件)。事件Close事件,ConnectionRequest事件,DataArrival事件,SendComplete事件,SendProgress事件,Error事件,Connect事件(Winsock控件),Connect事件。Winsock控件对用户来说是不可见的,它提供了访问TCP和UDP网络服务的方便途径。MicrosoftAccess、Visual Basic、Visual C+或Visual FoxPro的开发人员都可使用它。为编写客户或服务器应用 程序,不必了解TCP的细节或调用低级的Winsock APIs。
4、通过设置控件的属性并调用其方法就可轻易 连接到一台远程机器上去,并且还可双向交换数据。TCP基础数据传输协议允许创建和维护与远程计算机的连接。连接两台计算机就可彼此进行数据传输。如果创建客户应用程序,就必须知道服务器计算机名或者IP地址(RemoteHost属性),还要知道进行 侦听”的端口(RemotePort属性),然后调用Connect方法。如果创建服务器应用程序,就应设置一个收听端口(LocalPort属性)并调用Listen方法。当客户计算机 需要连接时就会发生ConnectionRequest事件。为了完成连接,可调用ConnectionRequest事件内的Accept方法。建立
5、连接后,任何一方计算机都可以收发数据。为了发送数据,可调用SendData方法。当接收数据时会 发生DataArrival事件。调用DataArrival事件内的GetData方法就可获取数据。UDP基础用户数据文报协议(UDP)是一个无连接协议。跟TCP的操作不同,计算机并不建立连接。另外UDP应用程序可以是客户机,也可以是服务器。为了传输数据,首先要设置客户计算机的LocalPort属性。然后,服务器计算机只需将RemoteHost设置为客户计算机的Internet地址,并将RemotePort属性设置为跟客户计算机的LocalPort属性相同的 端口,并调用SendData方法来着手发送
6、信息。于是,客户计算机使用DataArrival事件内的GetData方 法来获取已发送的信息。举例:WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并 进行数据交换。这两种协议都能用来创建客户端和服务端应用程序。就像定时器控件一样,WinSock控件运行时没有一个可视的界面。可能的用途创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来。创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。创建聊天序。协议的选择当我们使用WinSock控件时,首先要确定的是使用TCP还是UDP协议。它们之间主要的区别在于连 接状态:T
7、CP协议控件是一个基于连接的协议,就像电话机一样,用户必须在通话之前建立连接;UDP是一个无连接的协议,两台计算机之间的事务处理就像传纸条一样:一台计算机向另一台计算机 发送消息,但是它们之间并没有一个明确的连接路径。另外,发送的单个信息量的大小取决于网络。通常,你要创建的应用程序的类别就决定了你要选择的协议。以下是几个能够帮助你选择合适的协议 的问题:当发送或接收数据时,该应用程序需要从服务端或客户端获得认证吗?如果要的话,那么TCP协议就正好需要在发送或接受数据前建立明确的连接。要发送的数据量大吗?(就像图片、声音文件之类)一旦建立了连接,TCP协议就会保持连接并保证数据的完整性。但是,这
8、种连接会占用的更多的处理器资源,成本也会更高一些。数据是陆续传输的,还是一次全部传完呢?比如,如果你要创建的应用程序在某些任务完成时会告知 具体的计算机,那么选择UDP协议会更合适一些。UDP协议也更适合于发送小量数据。协议的配置配置你的应用程序所用到的协议:在设计阶段,单击工具窗口里的协议,选择sckTCPProtocol或sckUDPProtocol。你也可以在代码里配置协议,就像下面这样:Winsock1.Protocol=sckTCPProtocol确定你的计算机名要连接到远程的计算机,你必须知道它的IP地址或别名。IP地址是一串用句点分隔的3位数字。通常,计算机的别名更容易让人记住。
9、按下面的步骤可以找到你的计算机名:在任务栏哩单击开始”在设置”选项里单击 控制面板”;双击网络”图标;单击网络标识在计算机名”中显示的就是你的计算机名。一旦你找到你的计算名,它就可以作为远程主机的属性来用了。TCP连接入门当用TCP控件创建应用程序的时候,必须首先明确你的程序是作为服务端还是客户端。创建服务端程 序就意味着你的程序能够在指定的端口进行监听”,而客户端则能够提出请求,服务端能够接受请求并实现连接。一旦连接建立起来,客户端和服务端就能够自由地进行通信。创建服务端程序下面是创建一个简单服务端程序的步骤:创建一个标准EXE工程;把默认窗体(Default form)的名字改为frmSe
10、rver;把form的标题(caption)改为TCP Server;把Winsock控件拉到窗体中,并命名为tcpServer;在窗体中添加2个文本框,分别命名为txtSendData和txtOutput在窗体中加入下列代码;Private Sub Form_Load()Set the LocalPort property to an integer.Then invoke the Listen method.tcpServer.LocalPort = 1001 tcpServer.ListenfrmClient.Show Show the client form.End SubPrivat
11、e Sub tcpServer_ConnectionRequest _(ByVal requestID As Long)Check if the controls State is closed. If not,close the connection before accepting the new connection.If tcpServer.State sckClosed Then tcpServer.CloseAccept the request with the requestIDparameter.tcpServer.Accept requestIDend ifEnd SubPr
12、ivate Sub txtSendData_Change()The TextBox control named txtSendDatacontains the data to be sent. Whenever the usertypes into the textbox, the string is sentusing the SendData method.tcpServer.SendData txtSendData.TextEnd SubPrivate Sub tcpServer_DataArrival _(ByVal bytesTotal As Long)Declare a varia
13、ble for the incoming data.Invoke the GetData method and set the Textproperty of a TextBox named txtOutput tothe data.Dim strData As StringtcpServer.GetData strData txtOutput.Text = strData End Sub上面就是创建一个简单的服务端应用程序的过程。然而,要完成整个过程,你还得创建一个客户端程 序。创建TCP客户端程序在工程中添加一个新的窗体(form),并命名为frmClient;将窗体的标题(caption
14、)改为TCP Client;添加一个Windsock控件到窗体中,命名为tcpCllient;添加2个文本框控件到frmClient窗体,分别命名为txtSenddata和txtOutput;添加一个按钮控件(CommandButton)到窗体,命名为cmdConnecti;将按钮控件标题(caption)改为Connect;在窗体中添加下面代码:注:确保将远程主机属性(RemoteHost property)改为你的计算机别名。Private Sub Form_Load()The name of the Winsock control is tcpClient.Note: to specif
15、y a remote host, you can useeither the IP address (ex: ) orthe computer s friendly name, as shown here.tcpClient.RemoteHost = localhost tcpClient.RemotePort = 1001 End SubPrivate Sub cmdConnect_Click()Invoke the Connect method to initiate a connection.tcpClient.ConnectEnd SubPrivate Sub t
16、xtSendData_Change() tcpClient.SendData txtSendDataText End SubPrivate Sub tcpClient_DataArrival _(ByVal bytesTotal As Long)Dim strData As String tcpClient.GetData strData txtOutput.Text = strData End Sub以上代码就能创建一个简单的客 /服应用程序。要试着让两者建立连接, 可以运行工程,单击Connect 在任意一个txtSendData文本框中输入文本,同样的文本信息就会出现在另一个窗体的txt
17、Output文本框中 出现。接受多个连接请求上面介绍的服务端程序智能接受一个连接请求。但是,通过创建一组控件,并使用同样的控件来接受 多个连接请求也是可能的。在这种情况下,你不需要关闭连接,只要创建新的控件实例(通过配置它的索 引属性),调用新的实例中的接受方法。下面的代码中,假定在一个叫sckServer的窗体中有一个Winsock控件,它的索引属性设置为0。这 样这个控件就是控件数组的一部分。在声明段中,生命一个模块级变量intMax。在窗体的载入事件中,intMax被设置为0,数组中第一个控件的本地端口属性被设置为1001 o监听方法在控件中被调用,它被作为监听控件”。每个连接请求到来时
18、,代码会测试看它的索引(Index)是否为0(监听控件的值),如果是0,监听控件中intMax值增1 ,并用这个值创建新的控件实例。新的 控件实例被用来接受连接请求。Private intMax As LongPrivate Sub Form_Load() intMax = 0sckServer(0).LocalPort = 1001 sckServer(0).Listen End SubPrivate Sub sckServer_ConnectionRequest _ (Index As Integer, ByVal requestID As Long) If Index = 0 Then
19、intMax = intMax+ 1Load sckServer(intMax) sckServer(intMax).LocalPort = 0 sckServer(intMax).Accept requestID Load txtData(intMax) End IfEnd SubUDP连接入门创建一个UDP应用程序比创建TCP程序更简单,因为UDP协议不需要一个确定的连接。在上面的TCP应用程序中,其中一个Winsock控件必须明确的被设置为 监听”,而另一个必须用连接方法发起连接。相反,UDP协议不需要明确的连接。要在2个控件之间传送数据,(连接的双方)必须完成三个步骤: 确定远程主机属
20、性为对方的计算机名;确定远程主机属性为第二个控件的本地端口属性;调用约定方法指定要被使用的本地端口。(下面将详细讨论该方法)创建一个的UDP连接端创建一个标准EXE工程;将默认窗体命名为frmPeerA;在窗体中添加一个Winsock控件,命名为udpPeerA;在属性(Properties)页,单击协议(Protocol),改为UDPProtocol;添加2个文本框控件窗体中,分别命名为txtSend和txtOutput ;在窗体中添加下面代码:Private Sub Form_Load()The controls name is udpPeerAWith udpPeerAIMPORTANT
21、: be sure to change the RemoteHost value to the name of your computer.RemoteHost= PeerB.RemotePort = 1001 Port to connect to.Bind 1002 Bind to the local port.End WithfrmPeerB.Show Show the second form.End SubPrivate Sub txtSend_Change()Send text as soon as it s typed.udpPeerA.SendData txtSend.TextEn
22、d SubPrivate Sub udpPeerA_DataArrival _(ByVal bytesTotal As Long)Dim strData As StringudpPeerA.GetData strDatatxtOutput.Text = strDataEnd Sub创建第二个UDP连接端添加标准窗体到工程中;将窗体名改为frmPeerB;将窗体标题改为Peer B;在窗体中添加一个Windsock控件并命名为udpPeerB;在属性页中单击Protocol,改为UDPProtocol;添加2个文本框到窗体中,分别命名为txtSend和txtOutput ;在窗体中添加下面代码:Private Sub Form_Load()The controls name is
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025房地产项目环境保护与绿化咨询中介服务合同范本
- 2025年新能源产业担保合同要素与风险控制
- 2025年度高端别墅庭院搭棚设计与施工合同
- 2025年出国定居养老与退休规划服务合同
- 2025版能源项目委托担保合同模板
- 2025版电动汽车充电站配电柜销售合同
- 2025年物流代签合同委托书全新范本
- 2025房地产营销合作合同:海外地产项目营销推广服务
- 2025年度办公场地租赁与专业安保服务合同
- 2025年度高端网约车司机入职服务协议范本
- 集团公司财务管理制度
- 医院药品支付管理办法
- 学平险介绍课件
- 2025年院感知识理论考试题库及答案
- 从2025年河南中考语文试卷中分析阅读理解如何提分
- 《智能建筑供配电与照明》课件(上)
- 公共打印区域管理办法
- 科技伦理审查管理办法
- 2025至2030中国电子束灭菌服务行业项目调研及市场前景预测评估报告
- 模锻工艺培训课件
- 中学教学常规管理汇报
评论
0/150
提交评论