版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Visual Basic 網(wǎng)絡(luò)編程,Winsock控件Internet Transfer控件WebBrowser 控件,Winsock控件,Winsock是Windows Socket 的簡(jiǎn)稱。是Microsoft為Win32環(huán)境下的網(wǎng)絡(luò)編程提供的接口,這些接口是以API的形式出現(xiàn)的。 Winsock控件將Winsock API的大部分功能集成在了一起,只需要對(duì)控件的屬性進(jìn)行簡(jiǎn)單的設(shè)置,就可以實(shí)現(xiàn)基本的通信功能。 Win
2、sock控件位于 Microsoft Winsock Control 6.0部件中。 Winsock控件圖標(biāo),1.1 tcp基礎(chǔ),TCP傳輸控制協(xié)議提供兩臺(tái)計(jì)算機(jī)之間的可靠無(wú)錯(cuò)的數(shù)據(jù)傳輸,要求兩臺(tái)計(jì)算機(jī)之間要建立連接。允許你創(chuàng)建并維護(hù)一個(gè)與遠(yuǎn)程計(jì)算機(jī)的連接。使用該連接,兩臺(tái)計(jì)算機(jī)之間就可以交換數(shù)據(jù)了。如果你在創(chuàng)建一個(gè)客戶應(yīng)用程序,你必須知道服務(wù)器計(jì)算機(jī)的名字或IP地址(RemoteHost屬性),以及要監(jiān)聽的端口號(hào)(R
3、emotePort屬性)。然后調(diào)用Connect方法。如果你在創(chuàng)建一個(gè)服務(wù)器應(yīng)用程序,設(shè)置要監(jiān)聽的端口號(hào)(LocalPort屬性),調(diào)用Listen方法。當(dāng)客戶建立連接請(qǐng)求時(shí),產(chǎn)生ConnectionRequest事件。要完成該連接,在ConnectionRequest事件中調(diào)用Accept方法。一旦建立了連接,兩臺(tái)計(jì)算機(jī)之間就可以發(fā)送和接受數(shù)據(jù)了。要發(fā)送數(shù)據(jù),調(diào)用SendData方法。當(dāng)接受數(shù)據(jù)時(shí),產(chǎn)生DataArriv
4、al事件。在DataArrival事件中調(diào)用GetData方法來(lái)檢取數(shù)據(jù)。例如 使用TCP協(xié)議的聊天軟件,1.2 UDP 基礎(chǔ),是無(wú)連接的協(xié)議。與TCP操作不同,計(jì)算機(jī)并不建立一個(gè)連接。并且,UDP應(yīng)用程序可以是客戶也可以是服務(wù)器。要傳輸數(shù)據(jù),首先設(shè)置客戶計(jì)算機(jī)的LocalPort屬性(即發(fā)送數(shù)據(jù)端口)。服務(wù)器計(jì)算機(jī)只需要將RemoteHost屬性設(shè)置為客戶計(jì)算機(jī)的IP地址,將RemotePort屬性設(shè)置為客戶計(jì)算機(jī)上的Loca
5、lPort屬性值,服務(wù)器計(jì)算機(jī)然后調(diào)用SendData方法開始發(fā)送數(shù)據(jù)??蛻粲?jì)算機(jī)在DataArrival事件中使用又又方法檢取數(shù)據(jù)。例題 用UDP協(xié)議實(shí)現(xiàn)聊天軟件,1.3 Winsock控件的屬性,BytesReceives 屬性 返回接收端緩沖區(qū)中數(shù)據(jù)的字節(jié)數(shù)量,一個(gè)漢字為兩個(gè)字節(jié)??梢杂肎etData方法取得緩沖區(qū)的數(shù)據(jù),數(shù)據(jù)被取出后會(huì)改變BytesReceives屬性的值。用PeekData方法獲得數(shù)據(jù)后不會(huì)改變B
6、ytesReceives的值。 Protocol 屬性 返回或設(shè)置通信所使用的協(xié)議。其包括兩個(gè)可選擇的值:sckUDPProtocol 表示使用UDP協(xié)議,sckTCPProtocol表示使用TCP協(xié)議。該屬性的默認(rèn)值為sckTCPProtocol。,LocalHostName屬性 返回本機(jī)的計(jì)算機(jī)名稱。該屬性為只讀屬性,不能對(duì)其進(jìn)行賦值。程序運(yùn)行后該屬性會(huì)自動(dòng)被設(shè)置為本計(jì)算機(jī)的名稱。LocalIp 屬性 返回本
7、機(jī)的IP地址。該屬性為只讀屬性,不能對(duì)其進(jìn)行賦值。程序運(yùn)行后該屬性會(huì)自動(dòng)被設(shè)置為本計(jì)算機(jī)的名稱。LocalPort 屬性 返回或設(shè)置本機(jī)與其他機(jī)器進(jìn)行通信時(shí)使用的端口。當(dāng)本機(jī)作為客戶端時(shí),通過(guò)該屬性設(shè)置的端口來(lái)發(fā)送數(shù)據(jù)。當(dāng)本機(jī)作為服務(wù)器端時(shí),將用這個(gè)端口接收數(shù)據(jù)。如將該屬性設(shè)置為0,則其將隨機(jī)選擇一個(gè)端口。,RemoteHost 屬性 設(shè)置遠(yuǎn)程計(jì)算機(jī)的名稱。當(dāng)用Winsock控件來(lái)發(fā)送數(shù)據(jù)時(shí),該屬性指明數(shù)據(jù)要發(fā)送到的目的計(jì)
8、算機(jī)名稱。當(dāng)用Winsock控件來(lái)接收數(shù)據(jù)時(shí),該屬性指明要接收哪臺(tái)機(jī)器的數(shù)據(jù)。計(jì)算名稱可以是一個(gè)字符串,比如“MyComputer”,也可以是IP地址,比如“192.168.0.1”。RemoteHostIP 屬性 返回遠(yuǎn)程計(jì)算機(jī)IP地址,當(dāng)該Winsock控件用來(lái)偵聽時(shí),不需要對(duì)這個(gè)屬性進(jìn)行設(shè)置。RemotePort 屬性 返回或設(shè)置要連接的遠(yuǎn)程端口號(hào)。,State屬性 連接當(dāng)前的狀態(tài)。其取值如圖,常量值
9、描述SckClosed0缺省。關(guān)閉SckOpen 1 打開SckListening 2 監(jiān)聽SckConnectionPending 3連接未決SckResolvingHost4解析主機(jī)SckHostResolved5主機(jī)被解析SckConnecting6連接SckConnected7已連接SckClosing8對(duì)方在關(guān)閉連接
10、SckError9錯(cuò)誤,1.4 Winsock控件的方法,Bind 方法 指定為建立的套接字指定IP地址和端口,指定后通過(guò)這個(gè)套接字建立通信連接。語(yǔ)法object.Bind [LocalPort, LocalIP]Bind方法的語(yǔ)法有如下幾個(gè)部分:部分描述Object一個(gè)Winsock控件的對(duì)象表達(dá)式localPort建立連接所使用的端口號(hào)localIP建立連接所使用的本地IP地址,
11、Accept 方法 只對(duì)于TCP服務(wù)器應(yīng)用程序適用。該方法用于在處理ConnectionRequest事件時(shí)接受連入請(qǐng)求。 語(yǔ)法 object.Accept requestID object是Winsock控件的對(duì)象表達(dá)式。 說(shuō)明 在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ī)時(shí),必須關(guān)閉目前控件的運(yùn)作。 If Winsock1.State sckClosed Then Winsock1.Close ‘ 允許遠(yuǎn)程設(shè)備使用必要的識(shí)別碼(requestID)與
13、主機(jī)進(jìn)行連接 Winsock1.Accept requestID End Sub,Listen 方法 創(chuàng)建套接字并將其設(shè)置為偵聽模式。該方法僅適用于TCP連接。語(yǔ)法 object.Listen說(shuō)明 當(dāng)有連入請(qǐng)求時(shí)產(chǎn)生ConnectionRequest事件。在處理ConnectionRequest事件時(shí),應(yīng)用程序應(yīng)使用Accept(在新的控件實(shí)例)方法接受連接。,SendData 方法 給遠(yuǎn)
14、程計(jì)算機(jī)發(fā)送數(shù)據(jù)。語(yǔ)法object.SendData dataSendData方法的語(yǔ)法有如下幾個(gè)部分: 部分描述Object一個(gè)Winsock控件的對(duì)象表達(dá)式Data要發(fā)送的數(shù)據(jù)。說(shuō)明當(dāng)傳遞UNICODE字符串時(shí),在發(fā)送之前轉(zhuǎn)換為ANSI字符串。,GetData 方法 取得接收到的數(shù)據(jù),并清除接收緩沖區(qū)語(yǔ)法object.GetData 變量 [,type] [,maxLen]
15、GetData方法的語(yǔ)法有如下幾個(gè)部分:部分描述Object一個(gè)Winsock控件的對(duì)象表達(dá)式變量方法成功返回后保存數(shù)據(jù)的地方。Type可選參數(shù)。要接收的數(shù)據(jù)類型,maxLen可選參數(shù)。在接收字節(jié)矩陣或字符串時(shí)指定接收長(zhǎng)度。如果沒有指定該參數(shù),則接收字節(jié)矩陣或字符串中的所有數(shù)據(jù)。如果數(shù)據(jù)類型不是字節(jié)矩陣或字符串,則忽略該參數(shù)說(shuō)明 通常在DataArrival事件中使用GetData方法,其包含了一
16、個(gè)totalBytes參數(shù)。如果你指定的maxLen比totalBytes參數(shù)小,則將得到一個(gè)10040警告,表明其余數(shù)據(jù)將丟失。,type值的設(shè)置如下: 描述常量BytevbByteIntegervbIntegerLongvbLongSinglevbSingleDoublevbDoubleCurrencyvbCurrencyDatevbDateBooleanvb
17、BooleanSCODEvbErrorStringvbStringByte矩陣vbArray + vbByte,PeekData 方法 與GetData方法類似,只是取得接收到的數(shù)據(jù),但不清除接收緩沖區(qū)。語(yǔ)法object.PeekData 變量 [,type] [,maxLen],Close 方法 關(guān)閉客戶或服務(wù)器應(yīng)用程序的TCP連接。語(yǔ)法object.Close object是一個(gè)Wins
18、ock控件的對(duì)象表達(dá)式。,1.5 Winsock控件的事件,Connect 事件 當(dāng)一個(gè) 連接操作完成時(shí)發(fā)生。應(yīng)用于Winsock控件。語(yǔ)法 object_Connect()object 代表一個(gè)對(duì)象表達(dá)式,其值是一個(gè) Winsock 控件。說(shuō)明使用 Connect 事件確認(rèn)已經(jīng)成功建立了。其只適用于TCP連接。,ConnectionRequest 事件 當(dāng)遠(yuǎn)程計(jì)算機(jī)請(qǐng)求一個(gè)連接時(shí)產(chǎn)生該事件。只對(duì)于TCP服務(wù)
19、器應(yīng)用程序適用。當(dāng)有一個(gè)連入請(qǐng)求時(shí)就觸發(fā)該事件。該事件觸發(fā)之后,RemoteHostIP和RemotePort屬性中保存了客戶機(jī)的信息。語(yǔ)法object_ConnectionRequest ( requestID As Long)ConnectionRequest事件的語(yǔ)法有如下幾個(gè)部分: 部分描述Object一個(gè)Winsock控件的對(duì)象表達(dá)式requestID連入請(qǐng)求標(biāo)識(shí)符。
20、 該參數(shù)應(yīng)傳遞給Accept方法說(shuō)明 服務(wù)器可以確定是否接受一個(gè)連入請(qǐng)求。如果沒有接受連入請(qǐng)求,在客戶端將得到Close事件。適用Accept方法(在新的控件實(shí)例中)接受連入請(qǐng)求。,DataArrival 事件 當(dāng)新數(shù)據(jù)到達(dá)時(shí)產(chǎn)生該事件。語(yǔ)法object_DataArrival (bytesTotal As Long)DataArrival事件的語(yǔ)法有如下幾個(gè)部分:
21、部分描述Object一個(gè)Winsock控件的對(duì)象表達(dá)式bytesTotal 長(zhǎng)整數(shù)??梢詸z取數(shù)據(jù)的總數(shù)說(shuō)明只有當(dāng)新數(shù)據(jù)到來(lái)時(shí)才觸發(fā)該事件。可以使用BytesReceived屬性檢查可接收數(shù)據(jù)的數(shù)量。,例如:下面的例子在Winsock控件的DataArrival事件中使用了GetData方法。當(dāng)產(chǎn)生該事件時(shí),代碼調(diào)用GetData方法檢取數(shù)據(jù)并將其保存在一個(gè)字符串中。然后將數(shù)據(jù)寫入一個(gè)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ā)送操作完成時(shí)觸發(fā)該事件。語(yǔ)法object_Send
23、Complete()object是一個(gè)Winsock控件的對(duì)象表達(dá)式。無(wú)參數(shù),SendProgress 事件 在發(fā)送數(shù)據(jù)期間產(chǎn)生該事件。語(yǔ)法object_SendProgress (bytesSent As Long, bytesRemaining As Long)SendProgress事件的語(yǔ)法有如下幾個(gè)部分: 部分描述Object一個(gè)Winsock控件的對(duì)象表達(dá)式bytesSent從上
24、次觸發(fā)該事件到現(xiàn)在已發(fā)送數(shù) 據(jù)的字節(jié)數(shù)bytesRemaining在發(fā)送緩沖區(qū)中等待發(fā)送數(shù)據(jù)的字節(jié)數(shù),Error 事件后臺(tái)進(jìn)程發(fā)生錯(cuò)誤時(shí)產(chǎn)生該事件(如連接失敗,后臺(tái)發(fā)送或檢取數(shù)據(jù)失敗等)。語(yǔ)法object_Error(number As Integer, Description As String, Scode As Long,Source As String,
25、 HelpFile as String, HelpContext As Long, CancelDisplay AsBoolean).Error事件的語(yǔ)法有如下幾個(gè)部分:,Error事件的語(yǔ)法有如下幾個(gè)部分: 部分描述Object一個(gè)Winsock控件的對(duì)象表達(dá)式Number一個(gè)整數(shù),指定錯(cuò)誤碼。請(qǐng)參閱“設(shè)置”中 的常量Description
26、包含錯(cuò)誤消息的字符串Scode長(zhǎng)SCODESource描述錯(cuò)誤源的字符串helpFile包含幫助文件名的字符串helpContextHelp文件環(huán)境cancelDisplay指明是否取消該顯示動(dòng)作。缺省是 False,顯示缺省的錯(cuò)誤消息。如果你不 想使用缺省的錯(cuò)誤消息,可以將其設(shè)置
27、為 True,設(shè)置number值的設(shè)置如下: 常量值描述SckOutOfMemory7內(nèi)存不足SckInvalidPropertyValue380屬性值無(wú)效SckGetNotSupported394不能讀取屬性值SckSetNotSupported383屬性是只讀的SckBadState40006連接事務(wù)
28、或請(qǐng)求的協(xié)議或 連接狀態(tài)不正確SckInvalidArg40014傳遞給函數(shù)的參數(shù)格式不 正確或范圍不對(duì)SckS
29、uccess40017成功SckUnsupported40018不支持的變量類型SckInvalidOp40020對(duì)于當(dāng)前的狀態(tài),該操作 不正確SckOutOfRange40021參數(shù)超出了范圍SckWrongProtocol40026
30、連接事務(wù)或請(qǐng)求的協(xié)議不 正確SckOpCanceled1004操作被取消,常量值描述SckInvalidArgument10014請(qǐng)求的地址是廣播地址,但沒有設(shè)置標(biāo)記SckWouldBlock10035插槽是非阻塞的,指定的操作將被阻塞S
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- vb高級(jí)編程
- vb編程代碼大全
- vb最小化編程
- vb編程題目及答案
- vb編程題經(jīng)典案例
- 經(jīng)典的vb編程題
- 淺談Excel 的VB編程.txt
- 淺談Excel 的VB編程.txt
- 淺談Excel 的VB編程.txt
- vb黑客木馬編程(精選大全)
- 淺談Excel 的VB編程.txt
- 淺談Excel 的VB編程.txt
- vb編程工資管理系統(tǒng)(sql版)
- vb數(shù)據(jù)庫(kù)編程技術(shù)實(shí)例
- 可控噴墨模塊usjet的vb編程示范
- vb編程之對(duì)話框設(shè)計(jì)1
- 網(wǎng)絡(luò)編程
- 網(wǎng)絡(luò)編程
- vb編程_計(jì)算機(jī)考試題
- 臺(tái)灣豐煒plc m vb vh系列 編程手冊(cè)
評(píng)論
0/150
提交評(píng)論