vb網絡編程_第1頁
已閱讀1頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

5、lPort屬性值,服務器計算機然后調用SendData方法開始發(fā)送數(shù)據(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 屬性 返回或設置通信所使用的協(xié)議。其包括兩個可選擇的值:sckUDPProtocol 表示使用UDP協(xié)議,sckTCPProtocol表示使用TCP協(xié)議。該屬性的默認值為sckTCPProtocol。,LocalHostName屬性 返回本機的計算機名稱。該屬性為只讀屬性,不能對其進行賦值。程序運行后該屬性會自動被設置為本計算機的名稱。LocalIp 屬性 返回本

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

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

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

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

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

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

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

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

15、GetData方法的語法有如下幾個部分:部分描述Object一個Winsock控件的對象表達式變量方法成功返回后保存數(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值的設置如下: 描述常量BytevbByteIntegervbIntegerLongvbLongSinglevbSingleDoublevbDoubleCurrencyvbCurrencyDatevbDateBooleanvb

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

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

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

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

21、部分描述Object一個Winsock控件的對象表達式bytesTotal 長整數(shù)??梢詸z取數(shù)據(jù)的總數(shù)說明只有當新數(shù)據(jù)到來時才觸發(fā)該事件??梢允褂肂ytesReceived屬性檢查可接收數(shù)據(jù)的數(shù)量。,例如:下面的例子在Winsock控件的DataArrival事件中使用了GetData方法。當產生該事件時,代碼調用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 事件 當發(fā)送操作完成時觸發(fā)該事件。語法object_Send

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

24、次觸發(fā)該事件到現(xiàn)在已發(fā)送數(shù) 據(jù)的字節(jié)數(shù)bytesRemaining在發(fā)送緩沖區(qū)中等待發(fā)送數(shù)據(jù)的字節(jié)數(shù),Error 事件后臺進程發(fā)生錯誤時產生該事件(如連接失敗,后臺發(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控件的對象表達式Number一個整數(shù),指定錯誤碼。請參閱“設置”中 的常量Description

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論