Winsock控件使用手冊_第1頁
Winsock控件使用手冊_第2頁
Winsock控件使用手冊_第3頁
Winsock控件使用手冊_第4頁
Winsock控件使用手冊_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、Winsock控件使用手冊本文使用Word2000排版,如你閱讀時版面較凌亂,請使用Word2000閱讀。 Winsock控件對用戶是不可視的,可以很容易地訪問TCP和UDP網(wǎng)絡(luò)服務(wù)。TOM注:制作網(wǎng)絡(luò)通訊軟件,應(yīng)該沒有比VB+WINSOCK控件更簡單的方案了吧? 其可以被Microsoft Access, Visual Basic ,Visual C+或Visual FoxPro開發(fā)人員使用。用Winsock控件編寫客戶和服務(wù)器應(yīng)用程序,不需要了解TCP或調(diào)用底層Winsock API的具體細(xì)節(jié)。通過設(shè)置Winsock控件的屬性和調(diào)用該控件的方法,可以很容易地連接到遠(yuǎn)程計算機并進行雙向的數(shù)據(jù)

2、交換。TCP基本知識TCP(Transfer Control Protocol)允許你創(chuàng)建并維護一個與遠(yuǎn)程計算機的連接,使用該連接,兩臺計算機之間就可以交換數(shù)據(jù)了。如果你在創(chuàng)建一個客戶應(yīng)用程序,你必須知道服務(wù)器計算機的名字T注:建議用IP地址或IP地址(RemoteHost屬性),以及要監(jiān)聽的端口號(RemotePort屬性),然后調(diào)用Connect方法。如果你在創(chuàng)建一個服務(wù)器應(yīng)用程序,設(shè)置要監(jiān)聽的端口號(LocalPort屬性),調(diào)用Listen方法。當(dāng)客戶建立連接請求時,產(chǎn)生ConnectionRequest事件。要完成該連接,在ConnectionRequest事件中調(diào)用Accept方法

3、。一旦建立了連接,兩臺計算機之間就可以發(fā)送和接受數(shù)據(jù)了。要發(fā)送數(shù)據(jù),調(diào)用SendData方法。當(dāng)接受數(shù)據(jù)時,產(chǎn)生DataArrival事件。在DataArrival事件中調(diào)用GetData方法來檢取數(shù)據(jù)。UDP基本知識UDP(User Datagram Protocol)是無連接的協(xié)議。與TCP操作不同,計算機并不建立一個連接。并且,UDP應(yīng)用程序可以是客戶也可以是服務(wù)器。要傳輸數(shù)據(jù),首先設(shè)置客戶計算機的LocalPort屬性。服務(wù)器計算機T注:實際含義是指發(fā)送方只需要將RemoteHost屬性設(shè)置為客戶計算機T注:實際上的意思是指接收方的IP地址,將RemotePort屬性設(shè)置為客戶計算機上

4、的LocalPort屬性值,然后調(diào)用SendData方法開始發(fā)送數(shù)據(jù)。客戶計算機在DataArrival事件中使用GetData方法檢取數(shù)據(jù)。Winsock控件的屬性BytesReceived屬性,LocalHostName屬性,LocalIP屬性,LocalPort屬性,RemoteHost屬性(ActiveX控件),SocketHandle屬性,State屬性(Winsock控件),Protocol屬性(Winsock控件),Name屬性,Parent屬性,RemoteHost屬性(ActiveX控件),RemotePort屬性(ActiveX控件),Index屬性(ActiveX控件),

5、Tag屬性(ActiveX控件),Object屬性(ActiveX控件)。Winsock控件的方法Accept方法,Bind方法,Close方法(Winsock控件),Listen方法,PeerData方法,SendData方法,GetData方法(WinSock控件),GetData方法(ActiveX控件)。Winsock控件的事件Close事件,ConnectionRequest事件,DataArrival事件,SendComplete事件,SendProgress事件T注:該事件表示開始發(fā)送了,發(fā)送中,好像一般用不到,所以沒有說明Error事件,Connect事件(Winsock控件)

6、,Connect事件。請參閱可捕獲的Internet Transfer 控件錯誤,使用Winsock控件。 以下的內(nèi)容以字母為序排列Accept方法只對于TCP服務(wù)器應(yīng)用程序適用。該方法用于在處理ConnectionRequest事件時接受連入請求。應(yīng)用于Winsock控件。語法object.Accept requestedobject是Winsock控件的對象表達式。數(shù)據(jù)類型Long返回值Void說明在ConnectionRequest事件中使用Accept方法。ConnectionRequest事件相應(yīng)的參數(shù)RequestID也應(yīng)傳遞給Accept方法。下面是一個例子:Private Su

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

8、 SubT注:該例寫得不是太好,應(yīng)在新的控件實例中使用該方法,即動態(tài)地加載(LOAD)一個新的WINSOCK控件,用新控件而不是處于監(jiān)聽狀態(tài)的控件去連接 請參閱Connect方法,ConntectionRequest事件。下面示例的例子列出了使用TCP連接Winsock控件必須的代碼,使用RequestID標(biāo)識請求,該參數(shù)傳遞給接受請求的Accept方法。Private Sub WinsockTCP_ConnectionRequest _(requestID As Long) If Winsock1.State <> sckClosed ThenWinsock1.CloseWins

9、ock.Accept requestedEnd SubT注:這就對了!請注意,這次換了個新的SOCK來進行連接,但好像又少了個ENDIF!唉,真是誤人子弟:)Bind方法指定TCP連接中使用的LocalPort和LocalIP。T注:該用法比較少見,更多的是用在UDP通訊中,指定服務(wù)器駐守的端口如果你有多個協(xié)議適配器,使用該方法。應(yīng)用于Winsock控件。語法object.Bind LocalPort, LocalIPBind方法的語法有如下幾個部分:部分 描述object 一個Winsock控件的對象表達式localPort 建立連接所使用的端口號localIP 建立連接所使用的本地IP地址

10、說明在調(diào)用Listen方法之前你必須調(diào)用Bind方法T注:未必:)在UDP通訊的服務(wù)器端,倒是要先調(diào)用BIND方法!請參閱RemoteHost屬性(ActiveX控件),RemotePort屬性(ActiveX控件)。 BytesReceived屬性返回接受數(shù)據(jù)的數(shù)量(當(dāng)前接受緩沖區(qū)中的數(shù)據(jù))。使用GetData方法檢取數(shù)據(jù)。在設(shè)計時不可用, 在運行時是只讀的。應(yīng)用于Winsock控件。語法object.BytesReceivedobject是Winsock控件的對象表達式。返回值Long請參閱DataArrival事件。Close事件當(dāng)遠(yuǎn)程計算機關(guān)閉連接T注:只有TCP是“連接”的,UDP是

11、無“連接”的,或者反過來說,本手冊說“連接”時都是指的TCP時產(chǎn)生該事件。應(yīng)用程序應(yīng)使用Close方法正確地關(guān)閉一個TCP連接。應(yīng)用于Winsock控件。語法object_Close()object是Winsock控件的對象表達式。參數(shù) 沒有請參閱Close方法(Winsock控件)。Close方法關(guān)閉客戶或服務(wù)器應(yīng)用程序的TCP連接或監(jiān)聽插槽。應(yīng)用于Winsock控件。語法object.Closeobject是一個Winsock控件的對象表達式。參數(shù) 沒有返回值 Void請參閱Close事件。Connect 事件當(dāng)一個 Connect 操作完成時發(fā)生。應(yīng)用于Winsock控件。語法objec

12、t.Connect()object 置換元代表一個對象表達式,其值是一個 Winsock 控件。說明使用 Connect 事件確認(rèn)已經(jīng)成功建立了T注:該事件很重要,建議使用該事件而不是別的方法(如STATE的值)來判斷一個連接是否已經(jīng)成功Connect方法返回與遠(yuǎn)程計算機的連接T注:就是去連接!應(yīng)用于Winsock控件。語法object.Connect remoteHost, remotePortConnect方法的語法有如下幾個部分:部分 描述object 一個Winsock控件的對象表達式remoteHos 要連接的遠(yuǎn)程計算機的名字remotePort 要連接的遠(yuǎn)程計算機的端口號返回值 沒

13、有說明當(dāng)試圖建立一個TCP連接時,你必須調(diào)用Connect方法。請參閱Accept方法,ConnectionRequest事件,RemoteHost屬性(ActiveX控件),RemotePort屬性(ActiveX控件)。ConnectionRequest事件當(dāng)遠(yuǎn)程計算機請求一個連接時產(chǎn)生該事件。只對于TCP服務(wù)器應(yīng)用程序適用。 當(dāng)有一個連入請求時就觸發(fā)該事件。該事件觸發(fā)之后,RemoteHostIP和RemotePort屬性中保存了客戶機的信息。 應(yīng)用于Winsock控件。語法object_ConnectionRequest ( requestID As Long)ConnectionRe

14、quest事件的語法有如下幾個部分:部分 描述object 一個Winsock控件的對象表達式requested 連入請求標(biāo)識符。該參數(shù)應(yīng)傳遞給第二個控件實例的Accept方法,說明服務(wù)器可以確定是否接受一個連入請求。如果沒有接受連入請求,在客戶將得到Close事件。 適用Accept方法(在新的控件實例中)接受連入請求。請參閱Accept方法,Connect方法。DataArrival事件當(dāng)新數(shù)據(jù)到達時產(chǎn)生該事件。應(yīng)用于Winsock控件。語法object_DataArrival (bytesTotal As Long)DataArrival事件的語法有如下幾個部分:部分 描述object

15、一個Winsock控件的對象表達式bytesTotal 長整數(shù):可以檢取數(shù)據(jù)的總數(shù)說明如果你不在一次GetData調(diào)用中檢取所有的數(shù)據(jù)則不產(chǎn)生該事件。只有當(dāng)新數(shù)據(jù)到來時才觸發(fā)該事件。可以使用BytesReceived屬性檢查可檢取數(shù)據(jù)的數(shù)量。 請參閱BytesReceived屬性,SendData方法,SendComplete事件,SendProgress事件。下面示例的例子在Winsock控件的DataArrival事件中使用了GetData方法。當(dāng)產(chǎn)生該事件時,代碼調(diào)用GetData方法檢取數(shù)據(jù)并將其保存在一個字符串中。然后將數(shù)據(jù)寫入一個TextBox控件。Private Sub Wins

16、ock1_DataArrival _(ByVal bytesTotal As Long) Dim strData As StringWinsock1.GetData strData, vbStringText1.Text = Text1.Text & strDataEnd SubError事件后臺進程發(fā)生錯誤時產(chǎn)生該事件(如連接失敗,后臺發(fā)送或檢取數(shù)據(jù)失敗等)。 應(yīng)用于Winsock控件。語法object_Error(number As Integer, Description As String, Scode As Long,Source As String, HelpFile as

17、 String, HelpContext As Long,CancelDisplay AsBoolean).Error事件的語法有如下幾個部分:部分 描述object 一個Winsock控件的對象表達式number 一個整數(shù),指定錯誤碼請參閱“設(shè)置”中的常量description 包含錯誤消息的字符串scode長SCODEsource 描述錯誤源的字符串HelpFile 包含幫助文件名的字符串HelpContextHelp 文件環(huán)境CancelDisplay 指明是否取消該顯示動作缺省是False,顯示缺省的錯誤消息。如果你不想使用缺省的錯誤消息,可以將其設(shè)置為True設(shè)置number值的設(shè)置

18、如下:常量 值 描 述SckOutOfMemory 7 內(nèi)存不足SckInvalidPropertyValue 380 屬性值無效SckGetNotSupported 394 不能讀取屬性值SckSetNotSupported 383 屬性是只讀的SckBadState 40006 連接事務(wù)或請求的協(xié)議或連接狀態(tài)不正確SckInvalidArg 40014 傳遞給函數(shù)的參數(shù)格式不正確或范圍不對SckSuccess 40017 成功SckUnsupported 40018 不支持的變量類型SckInvalidOp 40020 對于當(dāng)前的狀態(tài),該操作不正確SckOutOfRange 40021 參

19、數(shù)超出了范圍SckWrongProtocol 40026 連接事務(wù)或請求的協(xié)議不正確SckOpCanceled 1004 操作被取消SckInvalidArgument 10014 請求的地址是廣播地址,但沒有設(shè)置標(biāo)記SckWouldBlock 10035 插槽是非阻塞的,指定的操作將被阻塞SckInProgress 10036 過程中有阻塞的Winsock操作SckAlreadyComplete 10037 操作完成。過程中沒有阻塞的Winsock操作SckNonRecoverableError 11003 不可恢復(fù)性錯誤SckNoData1 1004 名字有效,所請求的類型沒有數(shù)據(jù)記錄Ge

20、tData方法檢取當(dāng)前的數(shù)據(jù)塊,將其保存在一個Variant類型的變量中T注:實際上只有字符串/字節(jié)組兩種類型,參見講座的第四講。應(yīng)用于Winsock控件。返回值Void語法object.GetData data ,type ,maxLenGetData方法的語法有如下幾個部分:部分 描述object 一個Winsock控件的對象表達式data 保存取回來的數(shù)據(jù)的地方/變量。如果沒有足夠的空間保存數(shù)據(jù),則data設(shè)置為Emptytype,可選參數(shù)。要檢取的數(shù)據(jù)類型,如“設(shè)置”中所示maxLen,可選參數(shù)。在檢取字節(jié)矩陣或字符串時指定檢取長度。如果沒有指定該參數(shù),則檢取字節(jié)矩陣或字符串中的所有數(shù)

21、據(jù)。如果數(shù)據(jù)類型不是字節(jié)矩陣或字符串,則忽略該參數(shù)設(shè)置type值的設(shè)置如下:描述 常量Byte vbByteInteger vbIntegerLong vbLongSingle vbSingleDouble vbDoubleCurrency vbCurrencyDate vbDateBoolean vbBooleanSCODE vbErrorString vbStringByte矩陣 vbArray + vbByte說明通常在DataArrival事件中使用GetData方法,其包含了一個totalBytes參數(shù)。如果你指定的maxLen比totalBytes參數(shù)小,則將得到一個10040警告

22、,表明其余數(shù)據(jù)將丟失T注:非萬不得已,不要用該參數(shù),應(yīng)該一次性地將數(shù)據(jù)全部取回,再慢慢處理Listen方法創(chuàng)建一個插槽,并設(shè)置為監(jiān)聽模式。該方法只適用于TCP連接。應(yīng)用于Winsock控件。語法object.Listenobject是一個Winsock控件的對象表達式。參數(shù) 沒有返回值 Void說明當(dāng)有連入請求時產(chǎn)生ConnectionRequest事件。在處理ConnectionRequest事件時,應(yīng)用程序應(yīng)使用Accept(在新的控件實例)方法接受連接。請參閱Connect方法,Close方法(Winsock控件)。LocalHostName屬性返回本地計算機的名字。只讀,在設(shè)計時不可用

23、。應(yīng)用于Winsock控件。語法object.LocalHost Nameobject是一個Winsock控件的對象表達式。返回值 StringLocalIP屬性返回本地計算機的IP地址。只讀屬性,在設(shè)計時不可用。應(yīng)用于Winsock控件。語法object.LocalIPobject是Winsock控件的對象表達式。數(shù)據(jù)類型StringLocalPort屬性返回或設(shè)置本地使用的端口。可讀寫,在設(shè)計時可用。對于客戶,這將指定發(fā)送數(shù)據(jù)的端口。如果應(yīng)用程序不需要特定的端口,指定為0。在這種情況下,控件將隨機選擇一個端口。連接建立后,該本地端口就用于TCP連接。對于服務(wù)器,這是監(jiān)聽的本地端口。如果指定

24、為0,則隨機選用一個端口。在調(diào)用了Listen方法之后,屬性包含了實際選中的端口。應(yīng)用于Winsock控件。語法object.LocalPortlongobject是一個Winsock控件的對象表達式。數(shù)據(jù)類型 Long T注:講座中好像搞錯了,實際上長短均可:) 說明通常使用端口0在兩臺計算機之間動態(tài)建立連接。例如,希望服務(wù)器回調(diào)的客戶可以使用端口0隨機選中一個端口號,該端口號將傳遞給遠(yuǎn)程的服務(wù)器。 PeekData方法與GetData方法類似,只是其不從輸入隊列中刪除數(shù)據(jù)。應(yīng)用于Winsock控件。語法object.PeekData data ,type ,maxLenPeekData方法

25、的語法有如下幾個部分:部分 描述object 一個Winsock控件的對象表達式data 保存取回的數(shù)據(jù)的地方/變量如果沒有足夠的空間保存數(shù)據(jù),則data設(shè)置為Empty。type可選參數(shù)。要檢取的數(shù)據(jù)類型,如“設(shè)置”中所示。缺省是vbArray+ vbByte maxLen可選參數(shù)。在檢取字節(jié)矩陣或字符串時指定檢取長度。如果沒有指定該參數(shù),則檢取字節(jié)矩陣或字符串中的所有數(shù)據(jù)。如果數(shù)據(jù)類型不是字節(jié)矩陣或字符串,則忽略該參數(shù)設(shè)置type值的設(shè)置如下:描述 常量Byte vbByteInteger vbIntegerLong vbLongSingle vbSingleDouble vbDouble

26、Currency vbCurrencyDate vbDateBoolean vbBooleanSCODE vbErrorString vbStringByte矩陣 vbArray + vbByte返回值 Void說明如果類型指定為vbString,則數(shù)據(jù)返回給用戶之前轉(zhuǎn)換為UUICODE。 請參閱GetData方法(Winsock控件)。Protocol屬性返回或設(shè)置Winsock控件使用的協(xié)議,TCP或UDP。應(yīng)用于Winsock控件。語法object.Protocol =protocolobject是Winsock控件的對象表達式。設(shè)置protocol值的設(shè)置如下:常量 值 描述sckTC

27、PProtocol 0 缺省。使用TCP協(xié)議sckUDPProtocol 1 使用UDP協(xié)議返回值 Void說明在重新設(shè)置該屬性之前必須關(guān)閉控件(使用Close方法)。RemoteHostIP屬性返回遠(yuǎn)程計算機的IP地址。對于客戶應(yīng)用程序,使用Connect方法建立連接之后,該屬性包含了遠(yuǎn)程計算機IP字符串。對于服務(wù)器應(yīng)用程序,進來一個連接請求時,該屬性包含了初始化請求的遠(yuǎn)程計算機的IP字符串。在使用UDP協(xié)議時,在DataArrival事件產(chǎn)生后,該屬性包含了發(fā)送UDP數(shù)據(jù)的遠(yuǎn)程計算機的IP地址。應(yīng)用于Winsock控件。語法object.RemoteHostIPobject是Winsock控件的對象表達式。數(shù)據(jù)類型StringSendComplete事件當(dāng)發(fā)送操作完成時產(chǎn)生該事件。應(yīng)用于Winsock控件。語法object_SendCompleteobject是一個Winsock控件的對象表達式。參數(shù) 沒有請參閱DataArrival事件,SendProgress事件。SendData方法給遠(yuǎn)程計算機發(fā)送數(shù)據(jù)。返回值Void應(yīng)用于Winsock控件。語法obj

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論