vb網(wǎng)絡(luò)編程_第1頁
已閱讀1頁,還剩26頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Visual Basic 網(wǎng)絡(luò)編程,Winsock控件Internet Transfer控件WebBrowser 控件,Winsock控件,Winsock是Windows Socket 的簡稱。是Microsoft為Win32環(huán)境下的網(wǎng)絡(luò)編程提供的接口,這些接口是以API的形式出現(xiàn)的。 Winsock控件將Winsock API的大部分功能集成在了一起,只需要對控件的屬性進(jìn)行簡單的設(shè)置,就可以實現(xiàn)基本的通信功能。 Win

2、sock控件位于 Microsoft Winsock Control 6.0部件中。 Winsock控件圖標(biāo),1.1 tcp基礎(chǔ),TCP傳輸控制協(xié)議提供兩臺計算機(jī)之間的可靠無錯的數(shù)據(jù)傳輸,要求兩臺計算機(jī)之間要建立連接。允許你創(chuàng)建并維護(hù)一個與遠(yuǎn)程計算機(jī)的連接。使用該連接,兩臺計算機(jī)之間就可以交換數(shù)據(jù)了。如果你在創(chuàng)建一個客戶應(yīng)用程序,你必須知道服務(wù)器計算機(jī)的名字或IP地址(RemoteHost屬性),以及要監(jiān)聽的端口號(R

3、emotePort屬性)。然后調(diào)用Connect方法。如果你在創(chuàng)建一個服務(wù)器應(yīng)用程序,設(shè)置要監(jiān)聽的端口號(LocalPort屬性),調(diào)用Listen方法。當(dāng)客戶建立連接請求時,產(chǎn)生ConnectionRequest事件。要完成該連接,在ConnectionRequest事件中調(diào)用Accept方法。一旦建立了連接,兩臺計算機(jī)之間就可以發(fā)送和接受數(shù)據(jù)了。要發(fā)送數(shù)據(jù),調(diào)用SendData方法。當(dāng)接受數(shù)據(jù)時,產(chǎn)生DataArriv

4、al事件。在DataArrival事件中調(diào)用GetData方法來檢取數(shù)據(jù)。例如 使用TCP協(xié)議的聊天軟件,1.2 UDP 基礎(chǔ),是無連接的協(xié)議。與TCP操作不同,計算機(jī)并不建立一個連接。并且,UDP應(yīng)用程序可以是客戶也可以是服務(wù)器。要傳輸數(shù)據(jù),首先設(shè)置客戶計算機(jī)的LocalPort屬性(即發(fā)送數(shù)據(jù)端口)。服務(wù)器計算機(jī)只需要將RemoteHost屬性設(shè)置為客戶計算機(jī)的IP地址,將RemotePort屬性設(shè)置為客戶計算機(jī)上的Loca

5、lPort屬性值,服務(wù)器計算機(jī)然后調(diào)用SendData方法開始發(fā)送數(shù)據(jù)??蛻粲嬎銠C(jī)在DataArrival事件中使用又又方法檢取數(shù)據(jù)。例題 用UDP協(xié)議實現(xiàn)聊天軟件,1.3 Winsock控件的屬性,BytesReceives 屬性 返回接收端緩沖區(qū)中數(shù)據(jù)的字節(jié)數(shù)量,一個漢字為兩個字節(jié)。可以用GetData方法取得緩沖區(qū)的數(shù)據(jù),數(shù)據(jù)被取出后會改變BytesReceives屬性的值。用PeekData方法獲得數(shù)據(jù)后不會改變B

6、ytesReceives的值。 Protocol 屬性 返回或設(shè)置通信所使用的協(xié)議。其包括兩個可選擇的值:sckUDPProtocol 表示使用UDP協(xié)議,sckTCPProtocol表示使用TCP協(xié)議。該屬性的默認(rèn)值為sckTCPProtocol。,LocalHostName屬性 返回本機(jī)的計算機(jī)名稱。該屬性為只讀屬性,不能對其進(jìn)行賦值。程序運(yùn)行后該屬性會自動被設(shè)置為本計算機(jī)的名稱。LocalIp 屬性 返回本

7、機(jī)的IP地址。該屬性為只讀屬性,不能對其進(jìn)行賦值。程序運(yùn)行后該屬性會自動被設(shè)置為本計算機(jī)的名稱。LocalPort 屬性 返回或設(shè)置本機(jī)與其他機(jī)器進(jìn)行通信時使用的端口。當(dāng)本機(jī)作為客戶端時,通過該屬性設(shè)置的端口來發(fā)送數(shù)據(jù)。當(dāng)本機(jī)作為服務(wù)器端時,將用這個端口接收數(shù)據(jù)。如將該屬性設(shè)置為0,則其將隨機(jī)選擇一個端口。,RemoteHost 屬性 設(shè)置遠(yuǎn)程計算機(jī)的名稱。當(dāng)用Winsock控件來發(fā)送數(shù)據(jù)時,該屬性指明數(shù)據(jù)要發(fā)送到的目的計

8、算機(jī)名稱。當(dāng)用Winsock控件來接收數(shù)據(jù)時,該屬性指明要接收哪臺機(jī)器的數(shù)據(jù)。計算名稱可以是一個字符串,比如“MyComputer”,也可以是IP地址,比如“192.168.0.1”。RemoteHostIP 屬性 返回遠(yuǎn)程計算機(jī)IP地址,當(dāng)該Winsock控件用來偵聽時,不需要對這個屬性進(jìn)行設(shè)置。RemotePort 屬性 返回或設(shè)置要連接的遠(yuǎn)程端口號。,State屬性 連接當(dāng)前的狀態(tài)。其取值如圖,常量值

9、描述SckClosed0缺省。關(guān)閉SckOpen 1 打開SckListening 2 監(jiān)聽SckConnectionPending 3連接未決SckResolvingHost4解析主機(jī)SckHostResolved5主機(jī)被解析SckConnecting6連接SckConnected7已連接SckClosing8對方在關(guān)閉連接

10、SckError9錯誤,1.4 Winsock控件的方法,Bind 方法 指定為建立的套接字指定IP地址和端口,指定后通過這個套接字建立通信連接。語法object.Bind [LocalPort, LocalIP]Bind方法的語法有如下幾個部分:部分描述Object一個Winsock控件的對象表達(dá)式localPort建立連接所使用的端口號localIP建立連接所使用的本地IP地址,

11、Accept 方法 只對于TCP服務(wù)器應(yīng)用程序適用。該方法用于在處理ConnectionRequest事件時接受連入請求。 語法 object.Accept requestID object是Winsock控件的對象表達(dá)式。 說明 在ConnectionRequest事件中使用Accept方法。ConnectionRequest事件相應(yīng)的參數(shù)RequestID也應(yīng)傳遞給Accept方法。,例如

12、 Private Sub Winsock1_ConnectionRequest _(ByVal requestID As Long) ‘ 如果winsock1控件的狀態(tài),目前不是處于關(guān)閉狀態(tài),在進(jìn)行遠(yuǎn)程設(shè)備 '連機(jī)時,必須關(guān)閉目前控件的運(yùn)作。 If Winsock1.State sckClosed Then Winsock1.Close ‘ 允許遠(yuǎn)程設(shè)備使用必要的識別碼(requestID)與

13、主機(jī)進(jìn)行連接 Winsock1.Accept requestID End Sub,Listen 方法 創(chuàng)建套接字并將其設(shè)置為偵聽模式。該方法僅適用于TCP連接。語法 object.Listen說明 當(dāng)有連入請求時產(chǎn)生ConnectionRequest事件。在處理ConnectionRequest事件時,應(yīng)用程序應(yīng)使用Accept(在新的控件實例)方法接受連接。,SendData 方法 給遠(yuǎn)

14、程計算機(jī)發(fā)送數(shù)據(jù)。語法object.SendData dataSendData方法的語法有如下幾個部分: 部分描述Object一個Winsock控件的對象表達(dá)式Data要發(fā)送的數(shù)據(jù)。說明當(dāng)傳遞UNICODE字符串時,在發(fā)送之前轉(zhuǎn)換為ANSI字符串。,GetData 方法 取得接收到的數(shù)據(jù),并清除接收緩沖區(qū)語法object.GetData 變量 [,type] [,maxLen]

15、GetData方法的語法有如下幾個部分:部分描述Object一個Winsock控件的對象表達(dá)式變量方法成功返回后保存數(shù)據(jù)的地方。Type可選參數(shù)。要接收的數(shù)據(jù)類型,maxLen可選參數(shù)。在接收字節(jié)矩陣或字符串時指定接收長度。如果沒有指定該參數(shù),則接收字節(jié)矩陣或字符串中的所有數(shù)據(jù)。如果數(shù)據(jù)類型不是字節(jié)矩陣或字符串,則忽略該參數(shù)說明 通常在DataArrival事件中使用GetData方法,其包含了一

16、個totalBytes參數(shù)。如果你指定的maxLen比totalBytes參數(shù)小,則將得到一個10040警告,表明其余數(shù)據(jù)將丟失。,type值的設(shè)置如下: 描述常量BytevbByteIntegervbIntegerLongvbLongSinglevbSingleDoublevbDoubleCurrencyvbCurrencyDatevbDateBooleanvb

17、BooleanSCODEvbErrorStringvbStringByte矩陣vbArray + vbByte,PeekData 方法 與GetData方法類似,只是取得接收到的數(shù)據(jù),但不清除接收緩沖區(qū)。語法object.PeekData 變量 [,type] [,maxLen],Close 方法 關(guān)閉客戶或服務(wù)器應(yīng)用程序的TCP連接。語法object.Close object是一個Wins

18、ock控件的對象表達(dá)式。,1.5 Winsock控件的事件,Connect 事件 當(dāng)一個 連接操作完成時發(fā)生。應(yīng)用于Winsock控件。語法 object_Connect()object 代表一個對象表達(dá)式,其值是一個 Winsock 控件。說明使用 Connect 事件確認(rèn)已經(jīng)成功建立了。其只適用于TCP連接。,ConnectionRequest 事件 當(dāng)遠(yuǎn)程計算機(jī)請求一個連接時產(chǎn)生該事件。只對于TCP服務(wù)

19、器應(yīng)用程序適用。當(dāng)有一個連入請求時就觸發(fā)該事件。該事件觸發(fā)之后,RemoteHostIP和RemotePort屬性中保存了客戶機(jī)的信息。語法object_ConnectionRequest ( requestID As Long)ConnectionRequest事件的語法有如下幾個部分: 部分描述Object一個Winsock控件的對象表達(dá)式requestID連入請求標(biāo)識符。

20、 該參數(shù)應(yīng)傳遞給Accept方法說明 服務(wù)器可以確定是否接受一個連入請求。如果沒有接受連入請求,在客戶端將得到Close事件。適用Accept方法(在新的控件實例中)接受連入請求。,DataArrival 事件 當(dāng)新數(shù)據(jù)到達(dá)時產(chǎn)生該事件。語法object_DataArrival (bytesTotal As Long)DataArrival事件的語法有如下幾個部分:

21、部分描述Object一個Winsock控件的對象表達(dá)式bytesTotal 長整數(shù)??梢詸z取數(shù)據(jù)的總數(shù)說明只有當(dāng)新數(shù)據(jù)到來時才觸發(fā)該事件??梢允褂肂ytesReceived屬性檢查可接收數(shù)據(jù)的數(shù)量。,例如:下面的例子在Winsock控件的DataArrival事件中使用了GetData方法。當(dāng)產(chǎn)生該事件時,代碼調(diào)用GetData方法檢取數(shù)據(jù)并將其保存在一個字符串中。然后將數(shù)據(jù)寫入一個TextBox控件

22、。 Private Sub Winsock1_DataArrival _(ByVal bytesTotal As Long) Dim strData As String Winsock1.GetData strData Text1.Text = Text1.Text & strData End Sub,SendComplete 事件 當(dāng)發(fā)送操作完成時觸發(fā)該事件。語法object_Send

23、Complete()object是一個Winsock控件的對象表達(dá)式。無參數(shù),SendProgress 事件 在發(fā)送數(shù)據(jù)期間產(chǎn)生該事件。語法object_SendProgress (bytesSent As Long, bytesRemaining As Long)SendProgress事件的語法有如下幾個部分: 部分描述Object一個Winsock控件的對象表達(dá)式bytesSent從上

24、次觸發(fā)該事件到現(xiàn)在已發(fā)送數(shù) 據(jù)的字節(jié)數(shù)bytesRemaining在發(fā)送緩沖區(qū)中等待發(fā)送數(shù)據(jù)的字節(jié)數(shù),Error 事件后臺進(jìn)程發(fā)生錯誤時產(chǎn)生該事件(如連接失敗,后臺發(fā)送或檢取數(shù)據(jù)失敗等)。語法object_Error(number As Integer, Description As String, Scode As Long,Source As String,

25、 HelpFile as String, HelpContext As Long, CancelDisplay AsBoolean).Error事件的語法有如下幾個部分:,Error事件的語法有如下幾個部分: 部分描述Object一個Winsock控件的對象表達(dá)式Number一個整數(shù),指定錯誤碼。請參閱“設(shè)置”中 的常量Description

26、包含錯誤消息的字符串Scode長SCODESource描述錯誤源的字符串helpFile包含幫助文件名的字符串helpContextHelp文件環(huán)境cancelDisplay指明是否取消該顯示動作。缺省是 False,顯示缺省的錯誤消息。如果你不 想使用缺省的錯誤消息,可以將其設(shè)置

27、為 True,設(shè)置number值的設(shè)置如下: 常量值描述SckOutOfMemory7內(nèi)存不足SckInvalidPropertyValue380屬性值無效SckGetNotSupported394不能讀取屬性值SckSetNotSupported383屬性是只讀的SckBadState40006連接事務(wù)

28、或請求的協(xié)議或 連接狀態(tài)不正確SckInvalidArg40014傳遞給函數(shù)的參數(shù)格式不 正確或范圍不對SckS

29、uccess40017成功SckUnsupported40018不支持的變量類型SckInvalidOp40020對于當(dāng)前的狀態(tài),該操作 不正確SckOutOfRange40021參數(shù)超出了范圍SckWrongProtocol40026

30、連接事務(wù)或請求的協(xié)議不 正確SckOpCanceled1004操作被取消,常量值描述SckInvalidArgument10014請求的地址是廣播地址,但沒有設(shè)置標(biāo)記SckWouldBlock10035插槽是非阻塞的,指定的操作將被阻塞S

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論