Winsock控件使用手册_第1页
Winsock控件使用手册_第2页
Winsock控件使用手册_第3页
Winsock控件使用手册_第4页
Winsock控件使用手册_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

1、Winsock控件使用手册本文使用Word2000排版,如你阅读时版面较凌乱,请使用Word2000阅读。Winsock控件对用户是不可视的,可以很容易地访问TCP和UDP网络服务。TOM注:制作网络通讯软件,应该没有比VB+WINSOCK控件更简单的方案了吧?其可以被Microsoft Access, Visual Basic ,Visual C+或Visual FoxPro开发人员使用。用Winsock控件编写客户和服务器应用程序,不需要了解TCP或调用底层Winsock API的具体细节。通过设置Winsock控件的属性和调用该控件的方法,可以很容易地连接到远程计算机并进行双向的数据交换

2、。TCP基本知识TCP(Transfer Control Protocol)允许你创建并维护一个与远程计算机的连接,使用该连接,两台计算机之间就可以交换数据了。如果你在创建一个客户应用程序,你必须知道服务器计算机的名字T注:建议用IP地址或IP地址(RemoteHost属性),以及要监听的端口号(RemotePort属性),然后调用Connect方法。如果你在创建一个服务器应用程序,设置要监听的端口号(LocalPort属性),调用Listen方法。当客户建立连接请求时,产生ConnectionRequest事件。要完成该连接,在ConnectionRequest事件中调用Accept方法。一

3、旦建立了连接,两台计算机之间就可以发送和接受数据了。要发送数据,调用SendData方法。当接受数据时,产生DataArrival事件。在DataArrival事件中调用GetData方法来检取数据。UDP基本知识UDP(User Datagram Protocol)是无连接的协议。与TCP操作不同,计算机并不建立一个连接。并且,UDP应用程序可以是客户也可以是服务器。要传输数据,首先设置客户计算机的LocalPort属性。服务器计算机T注:实际含义是指发送方只需要将RemoteHost属性设置为客户计算机T注:实际上的意思是指接收方的IP地址,将RemotePort属性设置为客户计算机上的L

4、ocalPort属性值,然后调用SendData方法开始发送数据。客户计算机在DataArrival事件中使用GetData方法检取数据。Winsock控件的属性BytesReceived属性,LocalHostName属性,LocalIP属性,LocalPort属性,RemoteHost属性(ActiveX控件),SocketHandle属性,State属性(Winsock控件),Protocol属性(Winsock控件),Name属性,Parent属性,RemoteHost属性(ActiveX控件),RemotePort属性(ActiveX控件),Index属性(ActiveX控件),Ta

5、g属性(ActiveX控件),Object属性(ActiveX控件)。Winsock控件的方法Accept方法,Bind方法,Close方法(Winsock控件),Listen方法,PeerData方法,SendData方法,GetData方法(WinSock控件),GetData方法(ActiveX控件)。Winsock控件的事件Close事件,ConnectionRequest事件,DataArrival事件,SendComplete事件,SendProgress事件T注:该事件表示开始发送了,发送中,好像一般用不到,所以没有说明Error事件,Connect事件(Winsock控件),C

6、onnect事件。请参阅可捕获的Internet Transfer 控件错误,使用Winsock控件。以下的内容以字母为序排列Accept方法只对于TCP服务器应用程序适用。该方法用于在处理ConnectionRequest事件时接受连入请求。应用于Winsock控件。语法object.Accept requestedobject是Winsock控件的对象表达式。数据类型Long返回值Void说明在ConnectionRequest事件中使用Accept方法。ConnectionRequest事件相应的参数RequestID也应传递给Accept方法。下面是一个例子:Private Sub W

7、insock1_ConnectionRequest _(ByVal requestID As Long)' Close the connection if it is currently open' by testing the State property.If Winsock1.State <> sckClosed Then Winsock1.Close' Pass the value of the requestID parameter to the' Accept method.Winsock1.Accept requestedEnd Sub

8、T注:该例写得不是太好,应在新的控件实例中使用该方法,即动态地加载(LOAD)一个新的WINSOCK控件,用新控件而不是处于监听状态的控件去连接请参阅Connect方法,ConntectionRequest事件。下面示例的例子列出了使用TCP连接Winsock控件必须的代码,使用RequestID标识请求,该参数传递给接受请求的Accept方法。Private Sub WinsockTCP_ConnectionRequest _(requestID As Long)If Winsock1.State <> sckClosed ThenWinsock1.CloseWinsock.Ac

9、cept requestedEnd SubT注:这就对了!请注意,这次换了个新的SOCK来进行连接,但好像又少了个ENDIF!唉,真是误人子弟:)Bind方法指定TCP连接中使用的LocalPort和LocalIP。T注:该用法比较少见,更多的是用在UDP通讯中,指定服务器驻守的端口如果你有多个协议适配器,使用该方法。应用于Winsock控件。语法object.Bind LocalPort, LocalIPBind方法的语法有如下几个部分:部分            

10、0;      描述object      一个Winsock控件的对象表达式localPort       建立连接所使用的端口号localIP     建立连接所使用的本地IP地址说明在调用Listen方法之前你必须调用Bind方法T注:未必:)在UDP通讯的服务器端,倒是要先调用BIND方法!请参阅RemoteHost属性(ActiveX控件),RemotePort属性(ActiveX控件)

11、。BytesReceived属性返回接受数据的数量(当前接受缓冲区中的数据)。使用GetData方法检取数据。在设计时不可用, 在运行时是只读的。应用于Winsock控件。语法object.BytesReceivedobject是Winsock控件的对象表达式。返回值Long请参阅DataArrival事件。Close事件当远程计算机关闭连接T注:只有TCP是“连接”的,UDP是无“连接”的,或者反过来说,本手册说“连接”时都是指的TCP时产生该事件。应用程序应使用Close方法正确地关闭一个TCP连接。应用于Winsock控件。语法object_Close()object是Winsock控件

12、的对象表达式。参数     没有请参阅Close方法(Winsock控件)。Close方法关闭客户或服务器应用程序的TCP连接或监听插槽。应用于Winsock控件。语法object.Closeobject是一个Winsock控件的对象表达式。参数        没有返回值      Void请参阅Close事件。Connect 事件 当一个 Connect 操作完成时发生。应用于Winsock控件。语法object.Connect()o

13、bject 置换元代表一个对象表达式,其值是一个 Winsock 控件。说明使用 Connect 事件确认已经成功建立了T注:该事件很重要,建议使用该事件而不是别的方法(如STATE的值)来判断一个连接是否已经成功Connect方法返回与远程计算机的连接T注:就是去连接!应用于Winsock控件。语法object.Connect remoteHost, remotePortConnect方法的语法有如下几个部分:部分               

14、       描述object      一个Winsock控件的对象表达式remoteHos     要连接的远程计算机的名字remotePort   要连接的远程计算机的端口号返回值         没有说明当试图建立一个TCP连接时,你必须调用Connect方法。请参阅Accept方法,ConnectionRequest事件,RemoteHo

15、st属性(ActiveX控件),RemotePort属性(ActiveX控件)。ConnectionRequest事件当远程计算机请求一个连接时产生该事件。只对于TCP服务器应用程序适用。当有一个连入请求时就触发该事件。该事件触发之后,RemoteHostIP和RemotePort属性中保存了客户机的信息。应用于Winsock控件。语法object_ConnectionRequest ( requestID As Long)ConnectionRequest事件的语法有如下几个部分:部分         

16、            描述object      一个Winsock控件的对象表达式requested           连入请求标识符。该参数应传递给第二个控件实例的Accept方法,说明服务器可以确定是否接受一个连入请求。如果没有接受连入请求,在客户将得到Close事件。适用Accept方法(在新的控件实例中)接受连入请求。请参阅

17、Accept方法,Connect方法。DataArrival事件当新数据到达时产生该事件。应用于Winsock控件。语法object_DataArrival (bytesTotal As Long)DataArrival事件的语法有如下几个部分:部分                    描述object         一个W

18、insock控件的对象表达式bytesTotal      长整数:可以检取数据的总数说明如果你不在一次GetData调用中检取所有的数据则不产生该事件。只有当新数据到来时才触发该事件。可以使用BytesReceived属性检查可检取数据的数量。请参阅BytesReceived属性,SendData方法,SendComplete事件,SendProgress事件。下面示例的例子在Winsock控件的DataArrival事件中使用了GetData方法。当产生该事件时,代码调用GetData方法检取数据并将其保存在一个字符串中。然后将数据写入一个

19、TextBox控件。Private Sub Winsock1_DataArrival _(ByVal bytesTotal As Long)Dim strData As StringWinsock1.GetData strData, vbStringText1.Text = Text1.Text & strDataEnd SubError事件后台进程发生错误时产生该事件(如连接失败,后台发送或检取数据失败等)。应用于Winsock控件。语法object_Error(number As Integer, Description As String, Scode As Long,Sourc

20、e As String, HelpFile as String, HelpContext As Long, CancelDisplay AsBoolean).Error事件的语法有如下几个部分:部分                     描述object         一个Winsock控件的对象表达式number

21、        一个整数,指定错误码请参阅“设置”中的常量description   包含错误消息的字符串scode长SCODEsource   描述错误源的字符串HelpFile      包含帮助文件名的字符串HelpContextHelp         文件环境CancelDisplay   指明是否取消该显示动作缺省是False

22、,显示缺省的错误消息。如果你不想使用缺省的错误消息,可以将其设置为True设置number值的设置如下:常量                  值     描 述SckOutOfMemory            7      内

23、存不足SckInvalidPropertyValue   380    属性值无效SckGetNotSupported        394    不能读取属性值SckSetNotSupported        383    属性是只读的SckBadState       &#

24、160;       40006 连接事务或请求的协议或连接状态不正确SckInvalidArg             40014   传递给函数的参数格式不正确或范围不对SckSuccess                40017 &

25、#160; 成功SckUnsupported            40018   不支持的变量类型SckInvalidOp              40020   对于当前的状态,该操作不正确SckOutOfRange        &

26、#160;    40021   参数超出了范围SckWrongProtocol          40026   连接事务或请求的协议不正确SckOpCanceled             1004    操作被取消SckInvalidArgument   

27、;     10014   请求的地址是广播地址,但没有设置标记SckWouldBlock            10035    插槽是非阻塞的,指定的操作将被阻塞SckInProgress            10036    过程中有阻塞的Winsoc

28、k操作SckAlreadyComplete       10037    操作完成。过程中没有阻塞的Winsock操作SckNonRecoverableError   11003    不可恢复性错误SckNoData1               1004     名字有效,所

29、请求的类型没有数据记录GetData方法检取当前的数据块,将其保存在一个Variant类型的变量中T注:实际上只有字符串/字节组两种类型,参见讲座的第四讲。应用于Winsock控件。返回值Void语法object.GetData data ,type ,maxLenGetData方法的语法有如下几个部分:部分                描述object       一个Winsock

30、控件的对象表达式data        保存取回来的数据的地方/变量。如果没有足够的空间保存数据,则data设置为Emptytype,可选参数。要检取的数据类型,如“设置”中所示maxLen,可选参数。在检取字节矩阵或字符串时指定检取长度。如果没有指定该参数,则检取字节矩阵或字符串中的所有数据。如果数据类型不是字节矩阵或字符串,则忽略该参数设置type值的设置如下:描述             &

31、#160;     常量Byte                vbByteInteger             vbIntegerLong            &#

32、160;   vbLongSingle              vbSingleDouble              vbDoubleCurrency            vbCurrencyDate&#

33、160;               vbDateBoolean             vbBooleanSCODE               vbErrorString  &

34、#160;           vbStringByte矩阵           vbArray + vbByte说明通常在DataArrival事件中使用GetData方法,其包含了一个totalBytes参数。如果你指定的maxLen比totalBytes参数小,则将得到一个10040警告,表明其余数据将丢失T注:非万不得已,不要用该参数,应该一次性地将数据全部取回,再慢慢处理Listen方法

35、创建一个插槽,并设置为监听模式。该方法只适用于TCP连接。应用于Winsock控件。语法object.Listenobject是一个Winsock控件的对象表达式。参数        没有返回值      Void说明当有连入请求时产生ConnectionRequest事件。在处理ConnectionRequest事件时,应用程序应使用Accept(在新的控件实例)方法接受连接。请参阅Connect方法,Close方法(Winsock控件)。LocalHostName属性返回

36、本地计算机的名字。只读,在设计时不可用。应用于Winsock控件。语法object.LocalHost Nameobject是一个Winsock控件的对象表达式。返回值      StringLocalIP属性返回本地计算机的IP地址。只读属性,在设计时不可用。应用于Winsock控件。语法object.LocalIPobject是Winsock控件的对象表达式。数据类型StringLocalPort属性返回或设置本地使用的端口。可读写,在设计时可用。对于客户,这将指定发送数据的端口。如果应用程序不需要特定的端口,指定为0。在这种情况下,控件将

37、随机选择一个端口。连接建立后,该本地端口就用于TCP连接。对于服务器,这是监听的本地端口。如果指定为0,则随机选用一个端口。在调用了Listen方法之后,属性包含了实际选中的端口。应用于Winsock控件。语法object.LocalPortlongobject是一个Winsock控件的对象表达式。数据类型       Long T注:讲座中好像搞错了,实际上长短均可:)说明通常使用端口0在两台计算机之间动态建立连接。例如,希望服务器回调的客户可以使用端口0随机选中一个端口号,该端口号将传递给远程的服务器。PeekData方法与Get

38、Data方法类似,只是其不从输入队列中删除数据。应用于Winsock控件。语法object.PeekData data ,type ,maxLenPeekData方法的语法有如下几个部分:部分                  描述object       一个Winsock控件的对象表达式data      

39、;   保存取回的数据的地方/变量如果没有足够的空间保存数据,则data设置为Empty。type可选参数。要检取的数据类型,如“设置”中所示。缺省是vbArray+ vbBytemaxLen可选参数。在检取字节矩阵或字符串时指定检取长度。如果没有指定该参数,则检取字节矩阵或字符串中的所有数据。如果数据类型不是字节矩阵或字符串,则忽略该参数设置type值的设置如下:描述                 &#

40、160;   常量Byte                   vbByteInteger                vbIntegerLong        

41、60;          vbLongSingle                 vbSingleDouble                 vbDoubleCurrency 

42、              vbCurrencyDate                   vbDateBoolean              &

43、#160; vbBooleanSCODE                  vbErrorString                 vbStringByte矩阵         

44、;     vbArray + vbByte返回值          Void说明如果类型指定为vbString,则数据返回给用户之前转换为UUICODE。请参阅GetData方法(Winsock控件)。Protocol属性返回或设置Winsock控件使用的协议,TCP或UDP。应用于Winsock控件。语法object.Protocol =protocolobject是Winsock控件的对象表达式。设置protocol值的设置如下:常量  &

45、#160;               值          描述sckTCPProtocol        0     缺省。使用TCP协议sckUDPProtocol        1&

46、#160;    使用UDP协议返回值       Void说明在重新设置该属性之前必须关闭控件(使用Close方法)。RemoteHostIP属性返回远程计算机的IP地址。对于客户应用程序,使用Connect方法建立连接之后,该属性包含了远程计算机IP字符串。对于服务器应用程序,进来一个连接请求时,该属性包含了初始化请求的远程计算机的IP字符串。在使用UDP协议时,在DataArrival事件产生后,该属性包含了发送UDP数据的远程计算机的IP地址。应用于Winsock控件。语法object.Remot

47、eHostIPobject是Winsock控件的对象表达式。数据类型StringSendComplete事件当发送操作完成时产生该事件。应用于Winsock控件。语法object_SendCompleteobject是一个Winsock控件的对象表达式。参数         没有请参阅DataArrival事件,SendProgress事件。SendData方法给远程计算机发送数据。返回值Void应用于Winsock控件。语法object.SendData dataSendData方法的语法有如下几个部分:部分&#

48、160;                描     述object          一个Winsock控件的对象表达式data            要发送的数据T注:只能发送字符串/字节组,对于二进制数据,

49、应使用字节矩阵说明当传递UNICODE字符串时,在发送之前转换为ANSI字符串。SendProgress事件在发送数据时产生该事件。应用于Winsock控件。语法object_SendProgress (bytesSent As Long, bytesRemaining As Long)SendProgress事件的语法有如下几个部分:部分                 描      述object       一个Winsock控件的对象表达式bytesSent   从上次触发该事件到

温馨提示

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

评论

0/150

提交评论