利用VB進(jìn)行服務(wù)器編程實例講解_第1頁
利用VB進(jìn)行服務(wù)器編程實例講解_第2頁
利用VB進(jìn)行服務(wù)器編程實例講解_第3頁
利用VB進(jìn)行服務(wù)器編程實例講解_第4頁
利用VB進(jìn)行服務(wù)器編程實例講解_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、現(xiàn)在大多數(shù)語言都支持客戶服務(wù)器模式編程,其中VB給我們提供了很好的客戶服務(wù)器編程方式。下面我們用 VB來實現(xiàn) TCPIP 網(wǎng)絡(luò)編程。TCPIP 協(xié)議是 Internet 最重要的協(xié)議。 VB提供了 WinSock控件, 用于在 TCPIP 的基礎(chǔ)上進(jìn)行網(wǎng)絡(luò)通信。當(dāng)兩個應(yīng)用程序使用 Socket 進(jìn)行網(wǎng)絡(luò)通信時,其中一個必須 創(chuàng)建 Socket 服務(wù)器偵聽,而另一個必須創(chuàng)建 Socket 客戶去連接服務(wù)器。這樣兩個程序 就可以進(jìn)行通信了。1創(chuàng)建服務(wù)器,首先創(chuàng)建一個服務(wù)端口號。并開始偵聽是否有客戶請求連接。建立一窗體,并向其增加一個 Winsock 控件 ( 可在工程菜單中的部件項來添加此控 件)

2、 ,添加兩文本框 Text1,Text2, 和一按鈕 Command。1Private Sub Form_Load()SockServer.LocalPort = 2000 服務(wù)器端口號 , 最好大于 1000SockServer.Listen 開始偵聽End SubPrivate Sub Form_Unload(Cancel As Integer)SockServer.CloseEnd SubPrivate Sub SockServer_Close()SockServer.CloseEnd SubPrivate Sub SockServer_ConnectionRequest(ByVal r

3、equestID As Long)SockServer.CloseSockServer.Accept requestID 表示客戶請求連接的 ID 號End Sub當(dāng)客戶向服務(wù)器發(fā)送數(shù)據(jù)到達(dá)后 , 產(chǎn)生 DataArrival 事件 , 在事件中接收數(shù) 據(jù) ,GetData 方法接收數(shù)據(jù)。Private Sub SockServer_DataArrival(ByVal bytesTotal As Long)Dim s As StringSockServer.GetData sText1.Text = sEnd Sub當(dāng)我需要向客戶發(fā)送數(shù)據(jù)時,只需調(diào)用 SendData 方法。Private S

4、ub Command1_Click()SockServer .SendData Text2.TextEnd Sub2創(chuàng)建客戶。要創(chuàng)建客戶連接服務(wù)器,首先設(shè)置服務(wù)器主機名,如IP 地址、域名或計算機名,然后設(shè)置服務(wù)器端口,最后連接服務(wù)器。建立一窗體,并向其增加一個 Winsock 控件 ( 可在工程菜單中的部件項來添加此控 件) ,取名為: SockC1。添加兩文本框 Text1,Text2, 和一按鈕 Command。1Private Sub Form_Load()SockCl.RemoteHost = 表示服務(wù)器主機名 SockCl.RemotePort = 2000表示

5、服務(wù)器端口名SockCl.Connect連接到服務(wù)器End SubPrivate Sub Form_Unload(Cancel As Integer)SockCl.CloseEnd SubPrivate Sub SockCl_Close()SockCl.CloseEnd SubPrivate Sub SockCl_DataArrival(ByVal bytesTotal As Long)Dim s As StringSockCl.GetData s 接收數(shù)據(jù)到文本框中Text1.Text = sEnd SubPrivate Sub Command1_Click()SockCl.SendData

6、 Text2.Text 向服務(wù)器發(fā)送數(shù)據(jù)End Sub3進(jìn)行通信。把這兩個窗體分別編譯成兩個 EXE文件,服務(wù)器 Server.exe 和客戶 Client.exe 程序,并把它們分別安裝在服務(wù)器端和客戶端,這樣就可以實現(xiàn)兩者通信 了。VB Socket 編程(Winsock 控件創(chuàng)建 TCP/IP客戶機/服務(wù)器程序 )Winsock 控件建立在 TCP、UDP協(xié)議的基礎(chǔ)上,完成與遠(yuǎn)程計算機的通信。即使對 TCP/IP不太熟悉的用戶,使用該控件也可以在十幾分鐘內(nèi)創(chuàng)建一 個簡單的客戶機 / 服務(wù) 器程序。下面我們對 Winsock 控件的事件、方法、屬性按其在程序中出現(xiàn)的順序分別作 詳細(xì)的介紹,

7、以便更好地理解程序源代碼。下面是 Winsock 控件的相關(guān)屬性,方法和事件。 (略去一些暫用不到的 )*屬性LocalHostName | 本地機器名LocalIP | 本地機器 IP 地址LocalPort | 本地機器通信程序的端口 (0 端口 65536) RemoteHost | 遠(yuǎn)程機器名RemotePort | 遠(yuǎn)程機器的通信程序端口 state | 連接的當(dāng)前狀態(tài) ( 文后有詳細(xì)說明 )Protocal | 使用 TCP或UDP協(xié)議(這里我們選0- sckTCPProtocal )方法ListenListen 方法用于服務(wù)器程序,等待客戶訪問。 格式: Winsock 對象 .

8、listenConnectConnect 方法用于向遠(yuǎn)程主機發(fā)出連接請求格式: Winsock對象.connect 遠(yuǎn)程主機 IP, 遠(yuǎn)程端口 AcceptAccept 方法用于接受一個連接請求 格式: Winsock對象.accept Request IDSenddata 此方法用于發(fā)送數(shù)據(jù) 格式: Winsock 對象 .senddata 數(shù)據(jù)Getdata 用來取得接收到的數(shù)據(jù) 格式: Winsock對象.getdata 變量 , 數(shù)據(jù)類型 , 最大長度 Close關(guān)閉當(dāng)前連接 格式: Winsock 對象 .close*事件Close | 遠(yuǎn)程機器關(guān)閉連接時觸發(fā)Connect | 連接

9、建立好,可以進(jìn)行通信時觸發(fā) (客戶端) ConnectRequest | 有請求連接到達(dá)時產(chǎn)生 ( 服務(wù)器端 ) DataArrival | 有數(shù)據(jù)到達(dá)時觸發(fā)Error | 發(fā)生錯誤時發(fā)生SendProgress | 數(shù)據(jù)傳送進(jìn)度 服務(wù)器程序的實現(xiàn)過程是:( 1)服務(wù)器程序必須設(shè)置好 LocalPort 屬性,作為偵聽端口,該值為一個整數(shù)(只要 是一個其它 TCP/IP 應(yīng)用程序沒有使用過的值即可)。( 2)使用 Listen 方法進(jìn)入偵聽狀態(tài),等待客戶機程序的連接請求。( 3)客戶機程序發(fā)出連接請求,使服務(wù)器程序產(chǎn)生 ConnectionRequest 事件,該事件 得到一個參數(shù) reque

10、stID 。( 4)服務(wù)器程序用 Accept 方法接受客戶機程序的 requestID 請求。這樣,服務(wù)器程序 就可以用 SendData方法發(fā)送數(shù)據(jù)了。 Accept 方法必須用上一步得到的 requestID 作為 其參數(shù)。( 5)當(dāng)服務(wù)器程序接收到數(shù)據(jù)時,產(chǎn)生 DataArrival 事件,參數(shù) BytesTotal 包含接收 到的數(shù)據(jù)字節(jié)數(shù)。在該事件中,可以用 GetData 方法接收數(shù)據(jù)。(6)如果接受到 Close 事件,則用 Close 方法關(guān)閉 TCP/IP 連接。 客戶機程序的實現(xiàn)過程是:(1) 客戶程序設(shè)置 Remotehost 屬性,以便指定運行服務(wù)器程序的主機 名,該

11、字符串 可在“控制面板 | 網(wǎng)絡(luò)|標(biāo)識| 計算機名”中查到。(2) 設(shè)置 RemotePort 屬性, 以便指定服務(wù)器程序的偵聽端口。( 3)使用 Connect 方法,向服務(wù)器提出連接請求。(4)服務(wù)器接受客戶機程序的請求, 客戶機程序產(chǎn)生 Connect 事件,就可以用 SendData 方法發(fā)送數(shù)據(jù)了。( 5)當(dāng)客戶機程序接收到數(shù)據(jù)時,產(chǎn)生 DataArrival 事件,參數(shù) BytesTotal 包含接收 到的數(shù)據(jù)字節(jié)數(shù)。在該事件中,可以用 GetData 方法接收數(shù)據(jù)。( 6)如果接受到 Close 事件,則用 Close 方法關(guān)閉連接。Winsock 控件還有兩個重要的屬性, 即

12、Protocol 和 State 。Protocol 設(shè)定使用的協(xié)議是TCP還是 UDP:取值 sckTCPProtocol 表示 TCP, 取值 sckUDPProtocol 則表示 UDP。因為Winsock 控件的缺省設(shè)置是 sckTCPProtocol ,所以程序中并沒有使用 Protocol 屬性。 State 屬性反映的是當(dāng)前 TCP/IP 的連接狀態(tài),取值如表 1 所示。表 1 Winsock 控件的 State 屬性及其描述 常數(shù) 值 描述SckClosed 0 缺省值,關(guān)閉SckOpen 1 打開SckListening 2 偵聽SckConnectionPending 3

13、連接掛起SckResolvingHost 4 識別主機SckHostResolved 5 已識別主機SckConnecting 6 正在連接SckConnected 7 已連接SckClosing 8 同級人員正在關(guān)閉連接SckError 9 錯誤 先在一臺計算機上運行服務(wù)器程序,此時窗口上只有一個“退出”按鈕。 再在另一臺 計算機上運行客戶機程序, 在“連接”按鈕右邊的文本框中輸入服務(wù)器的主機名后單擊 “連接”按鈕。如果連接成功,則服務(wù)器和客戶機程序窗口都會出 現(xiàn)兩個文本框。這 時,兩端都可以在上面的文本框中輸入文字,這些文字會立即在下面的文本框中出現(xiàn)。 服務(wù)器程序使用的控件如下:( 1)C

14、ommand:1 退出按鈕;( 2)textsend :發(fā)送數(shù)據(jù)文本框;( 3)Winsockserver : 服務(wù)器 Winsock;( 4)textget :接收數(shù)據(jù)文本框。 服務(wù)器程序的界面如圖所示。服務(wù)器程序的源代碼如下:Private Sub Command1_Click()EndEnd SubPrivate Sub Form_Load() textsend.Visible = False textget.Visible = False Winsockserver.LocalPort = 1001 Winsockserver.ListenEnd SubPrivate Sub text

15、send_Change()Winsockserver.SendData textsend.TextEnd SubPrivate Sub Winsockserver_Close()Winsockserver.CloseEndEnd SubPrivate Sub Winsockserver_ConnectionRequest(ByVal requestID As Long) textsend.Visible = True textget.Visible = TrueIf Winsockserver.State sckClosed Then Winsockserver.Close Winsockse

16、rver.Accept requestIDEnd SubPrivate Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)Dim tmpstr As StringWinsockserver.GetData tmpstr textget.Text = tmpstrEnd Sub客戶機程序使用的控件如下:( 1)Command:1 退出按鈕; (2)Command:2 連接按鈕;( 3)Winsockclient :客戶 Winsock;(4)Text1 :主機名文本框; (5)Textsend :發(fā)送數(shù)據(jù)文本框; ( 6)Textget

17、 :接收數(shù)據(jù)文本框; 客戶機程序的源代碼如下:Private Sub Command1_Click()EndEnd SubPrivate Sub Command2_Click()Winsockclient.ConnectEnd SubPrivate Sub Form_Load() textsend.Visible = False textget.Visible = False Winsockclient.RemotePort = 1001 Winsockclient.RemoteHost = sccdsz End SubPrivate Sub Text1_Change() Winsockcli

18、ent.RemoteHost = Text1.Text End SubPrivate Sub textsend_Change() Winsockclient.SendData textsend.Text End SubPrivate Sub Winsockclient_Close()Winsockclient.CloseEndEnd SubPrivate Sub winsockclient_Connect() textsend.Visible = True textget.Visible = True Command2.Visible = False End SubPrivate Sub wi

19、nsockclient_DataArrival(ByVal bytesTotal As Long) Dim tmpstr As StringWinsockclient.GetData tmpstr textget.Text = tmpstrEnd Sub1 引言隨著網(wǎng)絡(luò)通信的興起與迅速發(fā)展, TCP/IP 協(xié)議已成為計算機網(wǎng)絡(luò)中最主要的傳輸協(xié) 議, TCP/IP 傳輸協(xié)議也越來越為人所熟知。目前的 Internet 網(wǎng)就是基于 TCP/IP 協(xié) 議的互聯(lián)網(wǎng)絡(luò)。 TCP/IP 除了用于廣域外,在局域網(wǎng)中也廣泛應(yīng)用。TCP 是傳輸控制協(xié)議,它提供了一種可靠的、面向會話連接的數(shù)據(jù)流服務(wù),它可以 在一

20、個分組可能發(fā)生丟失、破壞、重復(fù)、延遲和亂序的不可靠物理網(wǎng)絡(luò)之上通過確認(rèn)、 流控、復(fù)用同步等自動糾錯技術(shù)提供一種可靠的進(jìn)程間通信機制,從而充分保證用戶數(shù) 據(jù)傳送的可靠和有序性。使用 TCP 協(xié)議通信時, TCP 建立并控制數(shù)據(jù)發(fā)送方與接收方 的會話關(guān)系,當(dāng)接收方正確收到數(shù)據(jù)后,必須向發(fā)送方發(fā)送確認(rèn)信息。如果發(fā)送方在指 定時間內(nèi)未能收到確認(rèn)信息,將重發(fā)數(shù)據(jù)包。IP 指分組交換協(xié)議,是聯(lián)網(wǎng)的主機之間定義數(shù)據(jù)包傳送路由的規(guī)則,它的基本任務(wù) 是通過網(wǎng)絡(luò)傳送數(shù)據(jù)報,各個 IP 數(shù)據(jù)報之間是相互獨立的。 IP 本身沒有連接協(xié)議,在 交換數(shù)據(jù)前不會建立會話關(guān)系。 IP 收到數(shù)據(jù)后也不確認(rèn), 發(fā)送方和接收方都不

21、檢測數(shù)據(jù) 傳輸?shù)恼_性。 所以僅有 IP 是不可靠的,不能確保正確傳輸數(shù)據(jù)。 TCP 與 IP 的組合則 構(gòu)成了功能完整的傳輸協(xié)議。在 TCP/IP 網(wǎng)絡(luò)應(yīng)用中,多數(shù)網(wǎng)絡(luò)應(yīng)用程序是使用客戶 / 服務(wù)器模型方式,客戶向服 務(wù)器發(fā)出服務(wù)請求,服務(wù)器作出應(yīng)答響應(yīng),服務(wù)器通常在一個眾所周知的地址偵聽客戶 向服務(wù)器發(fā)出的請求,服務(wù)進(jìn)程這時一直是處于休眠狀態(tài),直到有一個客戶程序提出連 接請求。服務(wù)器作出應(yīng)答,并為客戶提供相應(yīng)的服務(wù)。客戶 / 服務(wù)器模型最重要的特點 是非對等相互作用,客戶與服務(wù)器處于不平等的地位。服務(wù)器擁有客戶機所不具備的各 種軟硬件資源和運算處理能力,服務(wù)器提供服務(wù),客戶請求服務(wù),這種模

22、式適應(yīng)了網(wǎng)絡(luò) 資源、運算能力、信息分布不均等現(xiàn)象,成為 IP 應(yīng)用的主要模式。Internet 中的 WWW 、 FTP、Telnet 、E-mail 等許多典型應(yīng)用都是采用客戶 / 服務(wù)器模型方式。Visual Basic 是 Windows 環(huán)境下簡單、易學(xué)、高效的可視化編程語言開發(fā)系統(tǒng), 以其所見即所得的可視化界面設(shè)計風(fēng)格和 32 位面向?qū)ο蟮某绦蛟O(shè)計等特點,已廣泛地 應(yīng)用于各個領(lǐng)域,是很多計算機軟件開發(fā)人員采用的開發(fā)工具。 VB 不但提供了良好的 界面設(shè)計能力,而且在網(wǎng)絡(luò)通信方面的功能也很強。采用 VB 開發(fā)網(wǎng)絡(luò)通信應(yīng)用軟件十 分方便,尤其軟件界面設(shè)計非常便捷,編程工作量較小,開發(fā)周期

23、短。Visual Basic6.0 中提供了 Winsock 控件,用于支持網(wǎng)絡(luò)中兩臺以上計算機之間進(jìn) 行通信。Winsock 控件提供了多樣化的屬性和方法來實現(xiàn)網(wǎng)絡(luò)通信。 通過設(shè)置 Winsock 控件屬性及調(diào)用控件方法就能夠?qū)崿F(xiàn) TCP或 UDP方式的網(wǎng)絡(luò)通信。因此,使用Winsock 控件編寫網(wǎng)絡(luò)通信程序的過程,實際上就是設(shè)置 Winsock 控件屬性和調(diào)用控件方法的 過程。利用這個控件,編程人員可以輕松地編寫出 TCP/IP 客戶服務(wù)器程序。2 Winsock 控件Winsock 控件是不可視控件, 它提供了訪問 TCP 和 UDP 網(wǎng)絡(luò)服務(wù)非常簡便的途徑, 使編程人員開發(fā)客戶 /服務(wù)

24、器應(yīng)用程序時,不必了解 TCP 的細(xì)節(jié)或調(diào)用低級的 WinsockAPIs 函數(shù),只通過設(shè)置 Winsock 控件的屬性并調(diào)用其方法, 就可直接連接到 一臺遠(yuǎn)程計算機進(jìn)行,并可實現(xiàn)雙向數(shù)據(jù)交換。 Microsoft Access 、Visual Baisc 、 Visual C+ 或 Visual FoxPro 都可用其編寫客戶服務(wù)器程序。如果訪問 TCP 傳輸控制協(xié)議服務(wù)功能,則須建立連接并實現(xiàn)主機間點對點通信。如 果訪問 UDP 數(shù)據(jù)文報協(xié)議功能,則不建立連接,發(fā)送數(shù)據(jù)將以廣播方式上網(wǎng)傳輸。3 TCP/IP 客戶服務(wù)器程序設(shè)計方法使用 TCP/IP 協(xié)議通訊,首先要指定通信方式為 TCP

25、方式,將 Winsock 控件的 Protocol 屬性設(shè)置為 sckTCPProtocol. 然后,按 TCP 通信協(xié)議規(guī)定,先要申請建立網(wǎng) 絡(luò)連接,然后才能傳輸數(shù)據(jù)。3.1 服務(wù)器程序開始偵聽網(wǎng)絡(luò)服務(wù)器程序窗體中有三個 Winsock 控件, Name 分別為 sckServer 、sckBusy 和 sckListen.其中 sckListen 是偵聽控件; sckBusy 是;sckServer 連接控件。 偵聽控件和連接 控件不能是同一個 Winsock 控件。服務(wù)器程序必須首先偵聽網(wǎng)絡(luò),等待客戶的連接申請,才有可能建立網(wǎng)絡(luò)連接。服 務(wù)器程序開始偵聽網(wǎng)絡(luò)前,需要為偵聽用( sckLi

26、sten )控件的 LocalPort 屬性設(shè)置通 信接口,然后調(diào)用 Listen 方法。服務(wù)器程序開始偵聽網(wǎng)絡(luò)的程序代碼如下:sckListen.LocalPort=4477 sckListen.Listen 偵聽網(wǎng)絡(luò)3.2 客戶程序申請連接 當(dāng)服務(wù)器程序已經(jīng)啟動運行并開始偵聽網(wǎng)絡(luò)后,在客戶程序申請連接前,需要為客 戶 Winsock 控件的 RemodeHost 屬性設(shè)置遠(yuǎn)程主機, 為 RemodePort 屬性設(shè)置通信 接口,然后再調(diào)用 Connect 方法向服務(wù)器程序申請連接。設(shè)置遠(yuǎn)程主機名,可以是計算機名也可是 IP 地址。如果是主機計算機名,則需要系 統(tǒng)翻譯為相應(yīng)的 IP 地址;如

27、果是主機 IP 地址,則直接進(jìn)行連接。申請連接的程序代碼如下:sckClient.Protocol = sckTCPProtocol 設(shè)置協(xié)議為 TCP 方式IP 地址 代表本機,與本機的實際地址無關(guān) sckClient.RemoteHost = 設(shè)置遠(yuǎn)程主機接口號,該值必須與設(shè)置遠(yuǎn)程主機服務(wù)器程序的接口號一致 sckClient.RemotePort = 4477 sckClient.Connect 申請連接3.3 服務(wù)器程序應(yīng)答連接請求服務(wù)器程序啟動偵聽網(wǎng)絡(luò)后, 當(dāng)客戶程序執(zhí)行 Connect 方法申請連接時, 服務(wù)器程 序的偵

28、聽控件( sckListen )觸發(fā) ConnectionRequest 事件,并傳遞連接請求句柄。 編程人員需要在該當(dāng)事件程序中調(diào)用連接控件 ( sckServer )的 Accept 方法實現(xiàn)連接。服務(wù)器程序應(yīng)答連接的程序代碼如下:Private Sub sckListen_ConnectionRequest(ByVal requestID As Long) sckServer.Accept requestID 應(yīng)答連接請求End Sub當(dāng)服務(wù)器程序執(zhí)行 Accept 方法建立連接后,客戶程序中的接連控件將觸發(fā) Connect 事件通報連接完成,否則觸發(fā) Error 事件通報連接失敗??梢?/p>

29、在該事件程序 中加入連接后的處理程序。如果要求服務(wù)器程序支持多用戶連接, 則需要創(chuàng)建 Winsock 控件數(shù)組,在連接時動 態(tài)生成 Winsock 控件與客戶程序建立連接。程序代碼應(yīng)修改如下:Private Sub sckListen_ConnectionRequest(ByVal requestID As Long)Dim i As LongIf CurNumberMaxNumber Then MaxNumber為最大連接數(shù), CurNumber 為當(dāng)前連接數(shù)For i = 1 To CurNumberIf sckServer(i).State = 0 Then 判斷是否有空閑 Winsoc

30、k 控件Exit ForEnd IfNext iIf i = CurNumber ThenCurNumber = CurNumber + 1i = CurNumberEnd IfLoad sckServer(i) 動態(tài)加載 Winsock 控件 sckServer(i).Accept requestIDExit SubEnd IfsckBusy.Close sckBusy.Accept requestIDEnd Sub3.4 傳送數(shù)據(jù) 當(dāng)服務(wù)器程序和客戶程序連接成功后,可以開始傳送數(shù)據(jù)。建立連接后的服務(wù)器程 序和客戶程序都可以發(fā)送或接收數(shù)據(jù)。當(dāng)一方要發(fā)送數(shù)據(jù)時,調(diào)用 SendData 方法。D

31、im SendStr As StringSendStr = 連接成功! Winsock1.SendData SendStr 傳送數(shù)據(jù) 如果一方發(fā)送了數(shù)據(jù),在連接的另一方控件將產(chǎn)生 DataArrival 事件,在DataArrival 事件處理程序中需要調(diào)用 GetData 方法接收數(shù)據(jù)。接收數(shù)據(jù)類型必須與 發(fā)送數(shù)據(jù)的類型一致方可正確接收數(shù)據(jù)。接收數(shù)據(jù)的程序代碼如下:Dim RecStr As String sckClient.GetData RecStr Print RecStr3.5 關(guān)閉連接當(dāng)應(yīng)用程序結(jié)束數(shù)據(jù)傳送后,必須關(guān)閉連接,釋放系統(tǒng)資源。當(dāng)連接的一方關(guān)閉連 接時,可以調(diào)用 Clos

32、e 方法。關(guān)閉連接程序代碼如下:sckClient.Close 關(guān)閉連接一方執(zhí)行關(guān)閉連接后, 在連接的另一方控件將產(chǎn)生 Close 事件。程序需要處理事件, 完成關(guān)閉連接的最后工作。該事件的處理代碼如下:Private Sub sckServer_Close() sckServer(Index).Close 釋放接連 Unload sckServer(Index) 刪除控件 End Sub4 使用 UDP 通信方式程序設(shè)計方法UDP 用戶報文協(xié)議是一個無連接協(xié)議,與 TCP 協(xié)議操作不同, UDP 協(xié)議不使用報 文確認(rèn)機制,不對報文排序,不進(jìn)行流控,因而 UDP 報文可能出現(xiàn)丟失、重復(fù)、亂序

33、等現(xiàn)象,但由于它的前期工作比 TCP 少,計算機不建立連接,因而可以迅速地展開通 信,一般用于傳輸少量不重要的數(shù)據(jù)和信息。 Winsock 控件的 UDP 通信方式是一種廣 播方式,當(dāng) UDP 主機發(fā)送數(shù)據(jù)時,網(wǎng)絡(luò)上所有其它主機都能收到數(shù)據(jù), UDP 通信比 TCP 方式簡單,由于 UDP 不需要連接,所以沒有申請連接和關(guān)閉連接的過程。 UDP 發(fā) 送者忽略接收者是否實際收到數(shù)據(jù),而接收者也忽略發(fā)送者是否已發(fā)送了數(shù)據(jù)。這使編 寫 UDP 通信方式的網(wǎng)絡(luò)程序非常簡單。4.1 設(shè)置服務(wù)器程序中 Winsock 控件的屬性 在服務(wù)器程序中,需要為 Winsock 控件的 LocalPort scks

34、erver.LocalPort=44774.2 客戶程序發(fā)送數(shù)據(jù)當(dāng) UDP 主機要發(fā)送數(shù)據(jù)時,可調(diào)用 SendData 方法。屬性設(shè)置通信接口:發(fā)送數(shù)據(jù)程序的代碼如下:Dim SendStr As String SendStr = 發(fā)送信息! sckClient.SendData SendStr 傳送數(shù)據(jù)vb 映射已知服務(wù)器的方法VB 設(shè)定/ 取消 網(wǎng)絡(luò)磁盤 使用方法:建立連線Function AddConnection(ByVal RemoteLocation AsByValString,LocalDriverAs String,ByValPasswd AsString,ByValUserN

35、ame AsString) As BooleanRemoteLocationLocalDriverPasswd用密碼為網(wǎng)絡(luò)磁盤原始來源,格式為RemoteComputerShareDirectory 對應(yīng)本機的磁盤代號,如: 存取網(wǎng)絡(luò)磁盤的 Password, 傳 Null 表示不H:UserName存取網(wǎng)絡(luò)磁盤的使用者代號 成功時傳回 True ,否則為 False例:CallAddConnection(Shihcmias,x:,vbNullString,cww)取消連線Function CancelConnection(ByVal LocalDriver As String, _ByVal

36、 ForceClose As Boolean) As BooleanLocalDriver : 對應(yīng)本機的磁盤代號,如: H:ForceClose : True 表示強迫結(jié)束連線,而不管有沒有程式正與之 連線成功時傳回 True ,否則為 False例:Call CancelConnection(x:, True)以下在 .basOption ExplicitType NETRESOURCE dwScope As Long dwType As Long dwDisplayType As Long dwUsage As Long lpLocalName As String lpRemoteNam

37、e As String lpComment As StringlpProvider As String End TypeDeclareFunctionWNetAddConnection2 Libmpr.dllAliasWNetAddConnection2A(lpNetResource AsNETRESOURCE,ByVallpPasswordAs String, ByVal lpUserNameAs String,ByValdwFlags AsLong) AsLongDeclareFunctionWNetCancelConnection2 Libmpr.dllAliasWNetCancelCo

38、nnection2A (ByVal lpName As String, ByVal dwFlagsAs Long, ByVal fForce As Long) As LongDeclare Function WNetGetLastError Lib mpr.dll AliasWNetGetLastErrorA (lpError As Long, ByVal lpErrorBuf AsAsString, ByVal nErrorBufSize As Long, ByVal lpNameBufString, ByVal nNameBufSize As Long) As LongPublic Const RESOURCE_PUBLICNET = &H2Public Const RESOURCETYPE_ANY = &H0Public Const RESOURCEDISPLAYTYPE_GENERIC = &H0Public Const RESOURCEUSAGE_CONNECTABLE = &H1Public Const CONNECT_UPDATE_PROFILE =

溫馨提示

  • 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

提交評論