全面掌握VisualC#實現(xiàn)UDP協(xié)議要點_第1頁
全面掌握VisualC#實現(xiàn)UDP協(xié)議要點_第2頁
全面掌握VisualC#實現(xiàn)UDP協(xié)議要點_第3頁
全面掌握VisualC#實現(xiàn)UDP協(xié)議要點_第4頁
全面掌握VisualC#實現(xiàn)UDP協(xié)議要點_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

全面掌握VisualC#實現(xiàn)UDP協(xié)議一走進協(xié)議:( )協(xié)議就是“用戶數(shù)據(jù)報協(xié)議”,它是一種無連接的協(xié)議,無連接主要是和協(xié)議相比較的。我們知道當利用協(xié)議傳送數(shù)據(jù)的時候,首先必須先建立連接(也就是所謂的握手)才可以傳輸數(shù)據(jù)。而當計算機利用協(xié)議進行數(shù)據(jù)傳輸?shù)臅r候,發(fā)送方只需要知道對方的地址和端口號就可以發(fā)送數(shù)據(jù),而并不需要進行連接。當然如果你非要進行連接,通過#也是可以實現(xiàn)的,但前提是要確定連接的遠程主機的端口號處于監(jiān)聽狀態(tài),否則程序會出現(xiàn)不必要的錯誤,但這是種畫蛇添足的做法,不僅丟失了協(xié)議的無連接傳送數(shù)據(jù)的特點和優(yōu)點,而且還給程序運行帶來了不安定的因素。所以這種方法并不值得提倡。由于 協(xié)議并不需要進行確定的連接,所以編寫基于 協(xié)議的應(yīng)用程序比起編寫基于 協(xié)議的應(yīng)用程序要簡單些(程序中可以不需要考慮連接和一些異常的捕獲工作)。但同時也給基于 協(xié)議編寫的程序帶來了一個致命的缺點,由于不提供可靠數(shù)據(jù)的傳輸,當計算機之間利用 協(xié)議傳送數(shù)據(jù)的時候,發(fā)送方只管發(fā)送數(shù)據(jù),而并不確認數(shù)據(jù)是否被對方接收。這樣就會導(dǎo)致某些 協(xié)議數(shù)據(jù)包在傳送的過程中丟失,尤其網(wǎng)絡(luò)質(zhì)量不令人滿意的情況下,丟失數(shù)據(jù)包的現(xiàn)象會更嚴重。這就是為什么在網(wǎng)絡(luò)上傳輸重要數(shù)據(jù)不采用 協(xié)議的原因。但是我們也不能因為這一個缺點就全面否定 協(xié)議,這是因為雖然利用協(xié)議來傳送安全性要求高的數(shù)據(jù)是不適合的,但對于那些不重要的數(shù)據(jù),或者即使丟失若干數(shù)據(jù)包也不影響整體性的數(shù)據(jù),如音頻數(shù)據(jù),視頻數(shù)據(jù)等,采用協(xié)議就是一個非常不錯的選擇。如目前網(wǎng)絡(luò)流行的很多即時聊天程序,如和等,采用的就是協(xié)議。同時雖然協(xié)議無法保證數(shù)據(jù)可靠性,但具有對網(wǎng)絡(luò)資源開銷較小,數(shù)據(jù)處理速度快的優(yōu)點,所以在有些對數(shù)據(jù)安全性要求不是很高的情況下,采用協(xié)議也是一個非常不錯的選擇??偨Y(jié)一下上面的內(nèi)容,可見是一種不面向連接的網(wǎng)絡(luò)協(xié)議,既有其優(yōu)點,也有其不足,具體如下:基于 協(xié)議的網(wǎng)絡(luò)應(yīng)用程序,實現(xiàn)起來比較簡單,并且基于 協(xié)議的網(wǎng)絡(luò)應(yīng)用程序在運行時,由于受到環(huán)境影響較小,所以不容易出錯。協(xié)議占用網(wǎng)絡(luò)資源較少,數(shù)據(jù)處理較快,所以在網(wǎng)絡(luò)中傳送對安全性要求不是十分高數(shù)據(jù)時,其優(yōu)點比較明顯。所謂對安全性要求不高的數(shù)據(jù),是指那些不重要的數(shù)據(jù),或者是即使丟失若干數(shù)據(jù),也不影響其整體的數(shù)據(jù),如音頻數(shù)據(jù)等。目前很多流行的網(wǎng)絡(luò)應(yīng)用程序都是基于協(xié)議的,如、等。3.由于其不是面向連接的網(wǎng)絡(luò)協(xié)議,其缺點也是非常明顯的,有些時候甚至是致命的。因為使用協(xié)議來傳送數(shù)據(jù),在數(shù)據(jù)發(fā)送后,在發(fā)送方并不確認對方是否接收到。這樣就可能導(dǎo)致傳送的數(shù)據(jù)在網(wǎng)絡(luò)中丟失,尤其在網(wǎng)絡(luò)條件并不很好的情況下,丟失數(shù)據(jù)包的現(xiàn)象就更多。所以傳送重要數(shù)據(jù)一般不采用 協(xié)議。

二.簡介 a發(fā)送、接收 數(shù)據(jù)包使用的主要類及其用法用 井實現(xiàn)協(xié)議,最為常用,也是最為關(guān)鍵的類就是 ,位于命名空間 中, 井發(fā)送、接收數(shù)據(jù)包都是通過 類的。表和表是 類中常用方法和屬性及其簡要說明。方法 說明關(guān)閉連接、onnect建立與遠程主機的連接退出多路廣播組將 添加到多路廣播組返回已由遠程主機發(fā)送的 數(shù)據(jù)文報將 數(shù)據(jù)文報發(fā)送到遠程主機表: 類中常用方法及其說明。屬性說明獲取或設(shè)置一個值,該值指示是否已建立了與遠程主機的連接獲取或設(shè)置基礎(chǔ)網(wǎng)絡(luò)套接字表: 類中常用方法及其說明。#使用類發(fā)送 數(shù)據(jù)包:

#使用類發(fā)送 數(shù)據(jù)包:在具體使用中,一般分成二種情況:()知道遠程計算機地址:方法的調(diào)用語法如下:參數(shù)說明:要發(fā)送的 數(shù)據(jù)文報(以字節(jié)數(shù)組表示)。數(shù)據(jù)文報中的字節(jié)數(shù)。一個,它表示要將數(shù)據(jù)文報發(fā)送到的主機和端口。一個,它表示要將數(shù)據(jù)文報發(fā)送到的主機和端口。返回值已發(fā)送的字節(jié)數(shù)。面使用發(fā)送 數(shù)據(jù)包的具體的調(diào)用例子:面使用發(fā)送 數(shù)據(jù)包的具體的調(diào)用例子:遠程計算機地址發(fā)送的字節(jié) 發(fā)送的字節(jié)長度(2).知道遠程計算機名稱::知道遠程計算機名稱后,利用方法直接把 數(shù)據(jù)包發(fā)送到遠程主機的指知道遠程計算機名稱后,利用方法直接把 數(shù)據(jù)包發(fā)送到遠程主機的指定端口號上了,這種調(diào)用方式也是最容易的,語法如下:參數(shù)說明:要發(fā)送的 數(shù)據(jù)文報(以字節(jié)數(shù)組表示)。數(shù)據(jù)文報中的字節(jié)數(shù)。要連接到的遠程主機的名稱。要與其通訊的遠程端口號。返回值已發(fā)送的字節(jié)數(shù)。u使用u使用類接收 數(shù)據(jù)包:接收 數(shù)據(jù)包使用的是 中由勺“Receive”方法。此方法的調(diào)用語法如下:ic e Receive e i ee參數(shù)e 是一個 類的實例,它表示網(wǎng)絡(luò)中發(fā)送此數(shù)據(jù)包的節(jié)點。如果指定了遠程計算機要發(fā)送到本地機的端口號,也可以通過偵聽本地端口號來實現(xiàn)對數(shù)據(jù)的獲取,下面就是通過偵聽本地端口號“8080”來獲取信息代碼:evee (eeceiveie ie e 008080 e ec eveReceive eeceivei三.i#實現(xiàn) 協(xié)議之網(wǎng)絡(luò)對時系統(tǒng)的體系結(jié)構(gòu)及功能簡介:在局域網(wǎng)中有很多應(yīng)用軟件為了協(xié)同工作,需要保證客戶機上時間統(tǒng)一,而為了實現(xiàn)這一點,通常的做法是客戶機從一個時間相對正確的服務(wù)器讀取時間,以此來校正本地時間。如經(jīng)??吹降膶r系統(tǒng)等。本節(jié)編寫的局域網(wǎng)上對時系統(tǒng)的主要的功能是保證局域網(wǎng)上計算機時間、日期的統(tǒng)一。網(wǎng)絡(luò)對時程序是體系結(jié)構(gòu)分成服務(wù)器端程序和客戶端程序二個部分,具體的作法是:在同一個網(wǎng)段上,固定一臺計算機作為對時的服務(wù)器,在這個網(wǎng)段的所有計算機都可以讀取這臺服務(wù)器上的時間和日期,并依此服務(wù)器上的時間和日期為基準,來確定本地的時間和日期。在服務(wù)器端程序需要達到以下功能:能夠接收局域網(wǎng)中任一臺客戶機的請求記錄請求客戶機的計算機名稱,和請求時間準確發(fā)送服務(wù)器端的時間和日期端程序要達到以下功能:能夠設(shè)定服務(wù)器的主機或者地址能夠接收服務(wù)器端發(fā)送的時間、日期信息能夠以接收的服務(wù)器端時間、日期為基準,校正本地時間因此在具體用 a實現(xiàn)網(wǎng)絡(luò)對時系統(tǒng)時就包括二個部分:服務(wù)器端程序和客戶端程序。下面首先介紹 al現(xiàn)網(wǎng)絡(luò)對時系統(tǒng)中服務(wù)器端程序的具體步驟。

四.a(chǎn)四.a(chǎn)實現(xiàn)網(wǎng)絡(luò)對時系統(tǒng)之服務(wù)器端程序的具體步驟:服務(wù)器端程序比客戶端程序相對要簡單,主要因是服務(wù)器端程序的工作比較簡單,就是接收客戶端的對時請求、發(fā)送服務(wù)器端的時間數(shù)據(jù)。而于客戶端不僅要傳送和接收數(shù)據(jù),還要把服務(wù)器端的時間提取出來,并以此來修改本地計算機的時間、日期。下面是用 #實現(xiàn)網(wǎng)絡(luò)對時系統(tǒng)之服務(wù)器端程序的具體步驟步驟。啟動 。2.選擇菜單【文件】|【新建】|【項目】后,彈出【新建項目】對話框。將【項目類型】設(shè)置為【 #項目】。將【模板】設(shè)置為【應(yīng)用程序】。在【名稱】文本框中輸入【對時服務(wù)器端】。啟在【位置】的文本框中輸入【項目】,然后單擊【確定】按鈕

啟在【位置】的文本框中輸入【項目】,然后單擊【確定】按鈕.在【解決方案資源管理器】窗口中,雙擊文件,進入文件.在【解決方案資源管理器】窗口中,雙擊文件,進入文件的編輯界面。在 文件的開頭,用下列導(dǎo)入命名空間代碼替代系統(tǒng)缺省的導(dǎo)入命名空間代碼。程序中使用到線程程序中使用到編碼切換到【 (設(shè)計)】窗口,并從【工具箱】中的【 窗體組件】中往窗體中拖入下列組件,并執(zhí)行相應(yīng)操作:一個組件,顯示對時服務(wù)器正在運行信息一個組件,名稱為 B用以顯示客戶端和服務(wù)器端交流的日志一個組件,名稱為,并在其拖入窗體后,雙擊,則系統(tǒng)會在文件中產(chǎn)生其 事件對應(yīng)的處理代碼。在.【解決方案資源管理器】窗口中,雙擊文件,進入文.件的編輯界面。在中.的代碼區(qū)添加下列代碼,下列代碼是定義以.下面代碼替代系統(tǒng)產(chǎn)生的過程。以.下面代碼替代系統(tǒng)產(chǎn)生的過程。程序中使用的全局變量和創(chuàng)建全局使用的實例:定義端口號設(shè)定本地 地址定義端口號對時服務(wù)器端正在運行清除信息對時服務(wù)器端至此,【對時服務(wù)器端】項目的界面設(shè)計和功能實現(xiàn)的前期工作就完成了,設(shè)計界面如圖01所示:lis+Eoxl:lis+Eoxl:======:====圖1【 對時服務(wù)器端】項目的設(shè)計界面在r文件中的 tae過程的后面添加下面代碼,下列代碼是定義過程“start_server”。此過程的功能是獲取客戶端對時請求數(shù)據(jù),并向客戶端發(fā)送服務(wù)器當前時間和日期。v start_server 接收從遠程主機發(fā)送到本地 端口的數(shù)據(jù)tereataservereeverereeve t獲得客戶端請求數(shù)據(jù)提取客戶端的信息,存放到定義為 的字符串數(shù)組中顯示端口號的請求信息時間: 接收信息如下:客戶機: 端口號: 發(fā)送服務(wù)器端時間和日期發(fā)送服務(wù)器時間! 對遠程主機的指定端口號發(fā)送服務(wù)器時間請注意:上述代碼中約定客戶機程序發(fā)送對時請求信息到服務(wù)器的808端0口號。服務(wù)器端程序接收發(fā)送到本地808端0口號的數(shù)據(jù)就完成了數(shù)據(jù)接收。為了能夠讓服務(wù)器端程序知道是那臺客戶機提出請求和要把對時信息發(fā)送到客戶機的那個端口號上,客戶端程序?qū)Πl(fā)送的對時請求信息進行了設(shè)計??蛻舳说膶r請求信息結(jié)構(gòu)為:計算機名稱+信客戶+機接收信息端口號這樣如果客戶端計算機名稱為: ,接收服務(wù)器端時間數(shù)據(jù)的端口號是8則客戶端程序發(fā)送的對時請求數(shù)據(jù)就為: 。服務(wù)器端程序在接收到客戶端對時請求數(shù)據(jù),并進行分析后,就能夠通過類的 方法準確的把服務(wù)器端當前的時間和日期發(fā)送到客戶端指定的端口號上。這樣客戶端程序通過讀取指定的端口號,就能夠獲得服務(wù)器端當前的時間和日期,從而以此來修正客戶端的時間和日期了。1在“start_server”過程之后面添加下面代碼,下列代碼是定義“run”過程。“run”過程的作用是創(chuàng)建一個線程實例,并以“start_server”過程來初始化線程實例。之所以采用線程是因為服務(wù)器端程序需要不間斷讀取發(fā)送到端口號,并且eceive方法是一個阻塞式方法。采用線程就是為了保證服務(wù)器端程序正常運行:ulicvoidrun 利用本地 端口號來初始化一個 網(wǎng)絡(luò)服務(wù)servernedClient ort receiveointne ndointne ddress開一個線程starterverne readne readtart star§t_server線程startervertart1在FormlcS中的 air函數(shù)之后添加下列代碼,下列代碼是定義“Form1_Load”事件,在此事件中將調(diào)用“run”過程,這樣當服務(wù)器端程序運行后,就啟動網(wǎng)絡(luò)對時服務(wù):rivatevoidForm1_Loadoectsender stem vei啟動對時服務(wù)run1在Formlcs文件中的“Form1_Load”事件之后,添加下列代碼,下列代碼是定義uttonl的“Click”事件,此事件的作用是清除服務(wù)器端程序顯示的日志信息:

序日志用.下列代碼替換中.的清除服務(wù)器端程方法。下列代碼的功能是手動收集程序中使用的資源:關(guān)閉線程序日志用.下列代碼替換中.的清除服務(wù)器端程方法。下列代碼的功能是手動收集程序中使用的資源:關(guān)閉線程清除資源至此,在上述步驟都正確完成,【對時服務(wù)器端】項目的全部工作就完成了。圖2對時服務(wù)器端】運行后的界面,在日志信息中記錄了對時請求客戶機的名稱,發(fā)送對時數(shù)據(jù)的端口號以及客戶端請求的時間:對時服務(wù)器端】項目的運行界面五.a(chǎn)五.a(chǎn)實現(xiàn)網(wǎng)絡(luò)對時系統(tǒng)之客戶端程序的具體步驟:客戶端的程序比服務(wù)器端程序要復(fù)雜些,因為客戶端程序不僅要往服務(wù)器端發(fā)送對時請求信息,接收服務(wù)器端反饋的日期和時間數(shù)據(jù),還要提取這些時間和日期信息,并以此來修改本地端的日期和時間。參照上面實現(xiàn)網(wǎng)絡(luò)對時系統(tǒng)服務(wù)器端程序,實現(xiàn)請求信息的發(fā)送和接收應(yīng)相對要容易許多。所以客戶端程序的關(guān)鍵就是根據(jù)獲得的服務(wù)器端日期、時間數(shù)據(jù)來修改本地的日期、時間。在版本中并沒有提供修改本地日期和時間的函數(shù)和類庫,本文的實現(xiàn)辦法是引入 函數(shù),通過對應(yīng)的 函數(shù)來更正本地時間和日期的,具體可參閱以下第十三和第十八步。以下是 a實現(xiàn)網(wǎng)絡(luò)對時系統(tǒng)之客戶端程序的具體實現(xiàn)步驟:啟動 。2.選擇菜單【文件】|【新建】|【項目】后,彈出【新建項目】對話框。將【項目類型】設(shè)置為【 #項目網(wǎng)。將【模板】設(shè)置為【 應(yīng)用程序】。在【名稱】文本框中輸入【 對時客戶端】。

.在【位置】的文本框中輸入【項目】,然后單擊【確定】按鈕。.在【位置】的文本框中輸入【項目】,然后單擊【確定】按鈕。.解決方案資源管理器】窗口中,雙擊 文件,進入 文件的編輯界面。8在 文件的開頭,用下列導(dǎo)入命名空間代碼替換 中缺省的導(dǎo)入命名空間代碼。程序引入函數(shù)要使用到程序引入函數(shù)要使用到.把 的集成開發(fā)環(huán)境的當前窗口切換到I (設(shè)計)I窗體設(shè)計界面,并從【工具箱】中的【窗體組件】中往窗體中拖入下列窗體設(shè)計界面,并從【工具箱】中的【窗體組件】中往窗體中拖入下列組件,并執(zhí)行相應(yīng)操作:三個組件,分別用來輸入服務(wù)器的地址,和顯示本地時間、服務(wù)器三個的時間二個組件,分別是和,在設(shè)計界面中分別雙擊和,系統(tǒng)會自動產(chǎn)生它們對應(yīng)的 事件處理代碼。三千個 組件?!窘鉀Q方案資源管理器】窗口中,雙擊 文件,進入 文件的編輯界面。在 中的 代碼區(qū)添加下列代碼,下列代碼的功能是在程序中定義系統(tǒng)時間的結(jié)構(gòu)體。定義系統(tǒng)時間的結(jié)構(gòu)在 中的 代碼區(qū)添加下列代碼,下列代碼的功能是定義程序中使用的全局變量。創(chuàng)建網(wǎng)絡(luò)服務(wù)定義接收服務(wù)器端程序發(fā)送對時信息對應(yīng)的端口號存放時間日期信息字符串定義一個時間類型,用以修改當前時間和日期并.以下面代碼替換中由系統(tǒng)產(chǎn)生的過程。獲取對時本地時間:服務(wù)器時間:設(shè)定服務(wù)器地址:對時客戶端至此【 對時客戶端】項目的界面設(shè)計和程序功能實現(xiàn)的前期工作就基本完成了,其設(shè)計界面如圖03所示:圖3【 對時客戶端】項目的設(shè)計界面在 中的過程之后,添加下列代碼,下列代碼的功能是在程序中導(dǎo)入 函數(shù),這個函數(shù)位于文件在 中的過程之后,添加下列代碼,下列代碼的功能是在程序中導(dǎo)入 函數(shù),這個函數(shù)位于文件。程序就是通過此函數(shù)來更正系統(tǒng)時間的。llrternelllriatestaticeternlet stesteietie引入函數(shù)ime并把它添加到在導(dǎo)入in函數(shù)代碼之后,再添加下列代碼,下列代碼是定義“start_client”過程。此過程的功能是向服務(wù)器端傳送對時請求,并獲取從服務(wù)器端反饋來的時間日期數(shù)據(jù)。clientnelientrressaressareceieinne naint rtlress stcntinetreilestrincntinestaens etssteetnc inne ste et定義發(fā)送到服務(wù)器端的請求信息trseenctancodin請求信息是一個字符串,為客戶端名稱和接收服務(wù)器反饋信息的端口號組成的字符串判斷使用者輸入的是 地址還是計算機名稱如果輸入的是計算機名稱,則按照執(zhí)行下列代碼。發(fā)送請求信息接收來自服務(wù)器端的信息輸入的是地址,則執(zhí)行下列代碼nintnintstnest發(fā)送請求信息ataLengtclienten senatasenst接收來自服務(wù)器端的信息erefterecata clienteceireceieint獲取服務(wù)器端的時間和日期tietrinenc eettrrecataclientClse退出循環(huán)cntine alse如果“start_client”過程正確調(diào)用,就把服務(wù)器端的時間和日期保存到tietrir字符串中了。用下列代碼替換r中cstt的“Click”事件的處理代碼。下列代碼的功能是調(diào)用“start_client”過程,獲取并顯示服務(wù)器端程序的時間和日期信息。Clickcli顯示

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論