第10章-WCF和UDP應用編程_第1頁
第10章-WCF和UDP應用編程_第2頁
第10章-WCF和UDP應用編程_第3頁
第10章-WCF和UDP應用編程_第4頁
第10章-WCF和UDP應用編程_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

工業(yè)和信息化部“十二五”規(guī)劃教材

普通高等學?!笆濉币?guī)劃教材

《C#網(wǎng)絡應用編程》第3版

第10章WCF和UDP應用編程2Ch10WCF和UDP應用編程10.1UDP應用編程概述10.2利用任務模型實現(xiàn)UDP應用編程10.3利用WCF實現(xiàn)UDP應用編程10.1UDP應用編程概述10.1.1UDP基本知識10.1.2UDP應用編程的技術選擇410.1.1UDP基本知識UDP(UserDatagramProtocol,用戶數(shù)據(jù)報協(xié)議)是簡單的、面向數(shù)據(jù)報的無連接協(xié)議,提供了快速但不一定可靠的傳輸服務。UDP的主要作用是將網(wǎng)絡數(shù)據(jù)流量壓縮成數(shù)據(jù)報的形式,每一個數(shù)據(jù)報用8個字節(jié)描述報頭信息,剩余字節(jié)包含具體的傳輸數(shù)據(jù)。UDP特點:(1)UDP可以一對多傳輸UDP不但支持一對一通信,而且支持一對多通信?;蛘哒f,利用UDP可以使用多播技術同時向多個接收方發(fā)送信息。510.1.1UDP基本知識(2)UDP傳輸速度比TCP快由于UDP不需要先與對方建立連接,也不需要傳輸確認,因此其數(shù)據(jù)傳輸速度比TCP快得多。(3)UDP有消息邊界使用UDP不需要考慮消息邊界問題。(4)UDP不保證有序傳輸UDP不確保數(shù)據(jù)的發(fā)送順序和接收順序一致。對于突發(fā)性的數(shù)據(jù)報,有可能會亂序。但是,這種亂序性基本上很少出現(xiàn),通常只會在網(wǎng)絡非常擁擠的情況下才有可能發(fā)生。(5)UDP可靠性不如TCPUDP不提供數(shù)據(jù)傳送的保證機制。10.1.1UDP基本知識2.單播、廣播和多播(1)單播單播是指只向某個指定的遠程主機發(fā)送信息,這種方式本質上屬于一對一的通信。(2)廣播廣播是指同時向子網(wǎng)中的多臺計算機發(fā)送消息,分為本地廣播和全球廣播。本地廣播是指向子網(wǎng)中的所有計算機發(fā)送廣播消息,其他網(wǎng)絡不會受到本地廣播的影響。全球廣播是指使用所有位全為1的IP地址(對于Ipv4來說指55),但是,由于路由器默認會自動過濾掉全球廣播,所以使用這個地址沒有實際意義。10.1.1UDP基本知識IP地址分為兩部分,網(wǎng)絡標識部分和主機標識部分,這兩部分是靠子網(wǎng)掩碼來區(qū)分的,我們把主機標識部分二進制表示全部為1的地址稱為本地廣播地址。例如,對于B類網(wǎng)絡,使用子網(wǎng)掩碼,則本地廣播地址是55,用二進制表示為11000000.10101000.11111111.11111111。其中前兩個字節(jié)(網(wǎng)絡標識部分)表示子網(wǎng)編號,后兩個字節(jié)(主機標識部分)全為1表示向該子網(wǎng)內的所有用戶發(fā)送消息。仍以為例,如果子網(wǎng)掩碼為,則本地廣播地址是55。192.168.0為網(wǎng)絡標識部分,255表示192.168.0子網(wǎng)中的所有主機。10.1.1UDP基本知識(3)多播(組播)多播也叫多路廣播,由于多播是分組的,所以也叫組播。對于IPv4來說,多播是指在到55的D類IP地址范圍內進行廣播(第1個字節(jié)在224~239之間)。或者說,發(fā)送方程序通過這些范圍內的某個地址發(fā)送數(shù)據(jù),接收方程序也監(jiān)聽并接收來自這些地址范圍的數(shù)據(jù)。10.1.2UDP應用編程的技術選擇編寫UDP應用程序時,可選擇以下技術。1.用Socket類實現(xiàn)第1種方式是直接用System.Net.Sockets命名空間下的Socket類來實現(xiàn)。采用這種方式時,需要程序員編寫的代碼最多,所有底層處理的細節(jié)都需要程序員自己去考慮。2.用UdpClient和多線程實現(xiàn)第2種方式是用System.Net.Sockets命名空間下的UdpClient類和Thread類來實現(xiàn)。UdpClient類對基礎Socket進行了封裝,發(fā)送和接收數(shù)據(jù)時不必考慮套接字收發(fā)時必須處理的細節(jié)問題,在一定程度上降低了用Socket編寫UDP應用程序的難度,提高了編程效率。10.1.2UDP應用編程的技術選擇編寫UDP應用程序時,可選擇以下技術。3.用UdpClient和多任務實現(xiàn)第3種方式是用UdpClient類以及基于任務的編程模型(Task類)來實現(xiàn)。用多任務實現(xiàn)比直接用多線程實現(xiàn)更有優(yōu)勢。4.用WCF實現(xiàn)第4種方式是用WCF來實現(xiàn)。即將WCF和UDP通過配置綁定在一起,這是對Socket進行的另一種形式的封裝。10.2利用任務模型實現(xiàn)UDP應用編程10.2.1利用UdpClient類發(fā)送和接收數(shù)據(jù)10.2.2利用UdpClient實現(xiàn)群發(fā)功能10.2.3利用UdpClient實現(xiàn)網(wǎng)絡會議討論10.2.1利用UdpClient類發(fā)送和接收數(shù)據(jù)System.Net.Sockets名稱空間下的UdpClient類對基礎套接字進行了一定程度的封裝,同時還可以用它直接調用基礎套接字提供的功能。TCP有TcpListener類和TcpClient類,而UDP只有UdpClient類,這是因為UDP是無連接的協(xié)議,所以只需要一種Socket。由于UDP不需要發(fā)送方和接收方先建立連接,因此發(fā)送方可以在任何時候直接向指定的遠程主機發(fā)送UDP數(shù)據(jù)報。在這種模式中,發(fā)送方是客戶端,具有監(jiān)聽功能的接收方是服務端。10.2.1利用UdpClient類發(fā)送和接收數(shù)據(jù)1.UdpClient類的常用構造函數(shù)UdpClient類提供了多種重載的構造函數(shù),分別用于IPv4和IPv6的數(shù)據(jù)收發(fā)。在這些構造函數(shù)中,最常用的重載形式就是帶本地終結點參數(shù)的構造函數(shù),語法如下。publicUdpClient(IPEndPointlocalEp)用這種構造函數(shù)創(chuàng)建的UdpClient對象會自動與參數(shù)中指定的本地終結點綁定在一起。綁定的目的是為了監(jiān)聽來自其他遠程主機的數(shù)據(jù)報。例如:IPEndPointlocalEndPoint=newIPEndPoint(localAddress,51666);UdpClientclient=newUdpClient(localEndPoint);10.2.1利用UdpClient類發(fā)送和接收數(shù)據(jù)2.同步發(fā)送和接收數(shù)據(jù)在同步阻塞方式下,可以用UdpClient對象的Send方法向遠程主機發(fā)送數(shù)據(jù),用Receive方法接收來自遠程主機的數(shù)據(jù)。(1)發(fā)送數(shù)據(jù)用UdpClient對象的Send方法同步發(fā)送數(shù)據(jù)時,該方法返回已發(fā)送的字節(jié)數(shù)。Send方法有多種重載形式,這里只介紹最常用的重載形式,語法如下。publicintSend(byte[]data,intlength,IPEndPointremoteEndPoint)10.2.1利用UdpClient類發(fā)送和接收數(shù)據(jù)(2)接收數(shù)據(jù)UdpClient對象的Receive方法用于獲取來自遠程主機的UDP數(shù)據(jù)報,語法如下。publicbyte[]Receive(refIPEndPointremoteEndPoint)例如:Task.Run(()=>

{while(true)

{IPEndPointremote=null;byte[]bytes=client.Receive(refremote);

strings=Encoding.Unicode.GetString(bytes);}});10.2.1利用UdpClient類發(fā)送和接收數(shù)據(jù)2.異步發(fā)送和接收數(shù)據(jù)對于執(zhí)行時間可能較長的任務,或者無法預測用時到底有多長的任務,最好用基于任務的異步編程來實現(xiàn)(調用UdpClient對象的SendAsync方法和ReceiveAsync方法)。使用這種辦法的好處是收發(fā)數(shù)據(jù)時,用戶界面不會出現(xiàn)停頓現(xiàn)象。異步發(fā)送數(shù)據(jù),例如:awaitclient.SendAsync(bytes,bytes.Length,remoteEndPoint);10.2.1利用UdpClient類發(fā)送和接收數(shù)據(jù)2.異步發(fā)送和接收數(shù)據(jù)異步接收數(shù)據(jù),例如:publicasyncvoidReceiveDataAsync(){while(true){varresult=awaitclient.ReceiveAsync();strings=Encoding.Unicode.GetString(result.Buffer);textBlock1.Dispatcher.Invoke(()=>{textBlock1.Text+=string.Format("來自{0}:{1}\n",result.RemoteEndPoint,s);

});}}10.2.1利用UdpClient類發(fā)送和接收數(shù)據(jù)3.基本用法示例【例10-1】演示用UdpClient收發(fā)數(shù)據(jù)的基本用法,運行效果如圖10-1所示。10.2.2利用UdpClient實現(xiàn)群發(fā)功能1.加入和退出多播組多播組可以是永久的,也可以是臨時的。在實際應用中,大多數(shù)多播組都是臨時的,即僅在多播組中有成員的時候才存在。凡是加入到多播組的接收端都可以接收來自多播發(fā)送端發(fā)送的數(shù)據(jù)。但是,如果不加入多播組,則無法接收多播數(shù)據(jù)。向多播組發(fā)送數(shù)據(jù)時,需要先創(chuàng)建一個UdpClient對象。例如:UdpClientclient=newUdpClient("",8001);使用多播時,應注意的是該對象TTL值的設置。利用UdpClient對象的Ttl屬性可修改TTL的默認值,例如:UdpClientudpClient=newUdpClient();udpClient.Ttl=50;10.2.2利用UdpClient實現(xiàn)群發(fā)功能(1)加入多播組利用UdpClient對象的JoinMulticastGroup方法可加入到指定的多播組中,例如://創(chuàng)建UdpClient的實例并設置本地監(jiān)聽的端口號UdpClientudpClient=newUdpClient(8001);udpClient.JoinMulticastGroup(IPAddress.Parse(""));(2)退出多播組利用UdpClient的DropMulticastGroup方法可以退出多播組。參數(shù)中指出要退出多播組的IPAddress對象。例如:udpClient.DropMulticastGroup(IPAddress.Parse(""));10.2.2利用UdpClient實現(xiàn)群發(fā)功能2.是否允許接收多播利用UdpClient對象的MulticastLoopback屬性可控制是否允許接收多播信息。該屬性默認為true,即允許接收多播。3.基本用法示例【例10-2】演示用UdpClient實現(xiàn)多播的基本用法,運行效果如圖10-2所示。10.2.3利用UdpClient實現(xiàn)網(wǎng)絡會議討論【例10-3】演示用多播技術實現(xiàn)網(wǎng)絡會議討論的基本用法,運行效果如圖10-3所示。10.2.3利用UdpClient實現(xiàn)網(wǎng)絡會議討論1.定義消息格式在這個例子中,消息由命令和參數(shù)兩大部分組成,命令與參數(shù)之間用逗號分隔。(1)Login,用戶名含義:用戶請求進入會議室。(2)List,會議室現(xiàn)有人員列表含義:接收方收到List消息之后,將該用戶添加到“會議室現(xiàn)有成員”中。(3)Logout,用戶名含義:用戶請求退出會議室。(4)Say,用戶名,發(fā)言信息含義:與會人員發(fā)出的談話內容。10.3利用WCF實現(xiàn)UDP應用編程在面向服務的分布式應用程序中,建議用WCF實現(xiàn)UDP應用編程,而不是用傳統(tǒng)的技術去實現(xiàn)。WCF中與UDP相關的綁定只有<udpBinding>,對應的類為UdpB

溫馨提示

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

評論

0/150

提交評論