第4章 UDP網(wǎng)絡(luò)程序的開發(fā)_第1頁
第4章 UDP網(wǎng)絡(luò)程序的開發(fā)_第2頁
第4章 UDP網(wǎng)絡(luò)程序的開發(fā)_第3頁
第4章 UDP網(wǎng)絡(luò)程序的開發(fā)_第4頁
第4章 UDP網(wǎng)絡(luò)程序的開發(fā)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章UDP網(wǎng)絡(luò)程序的開發(fā)4.1UDP程序開發(fā)的主要技術(shù)

4.2UDP的廣播與組播程序的開發(fā)

4.3基于廣播和組播的網(wǎng)絡(luò)會議程序的開發(fā)

本章教學(xué)主要內(nèi)容4.1UDP程序開發(fā)的主要技術(shù)

4.1.1UDP與TCP的區(qū)別與優(yōu)勢

4.1.2

使用UDP類進行網(wǎng)絡(luò)傳輸

4.1.3UDP下的同步與異步通訊

4.1

UDP與TCP的區(qū)別與優(yōu)勢1.UDP的可靠性不如TCP2.UDP不能保證有序傳輸3.UDP擁有比TCP更快的傳輸速度4.UDP有消息邊界5.UDP可以一對多傳輸4.1.2UDP的廣播與組建程序的開發(fā)UdpClient類

(1)TCP有TcpListener和TcpClient兩個類,而UDP只有UdpClient這一個類,這是因為UDP是無連接的協(xié)議,所以只需要一種封裝后的Socket。(2)UdpClient擁有6種重載的構(gòu)造函數(shù),對于IPV4來說,常用的重載形式有4種:4.1.2UDP的廣播與組建程序的開發(fā)1)PublicUdpClient()

此構(gòu)造函數(shù)創(chuàng)建一個新的UdpClient對象,并自動分配合適的本地Ipv4地址和端口號,但是該構(gòu)造函數(shù)不執(zhí)行套接字綁定。如果使用這種構(gòu)造函數(shù),在發(fā)送數(shù)據(jù)報之前,必須先調(diào)用Connect方法,而且只能將數(shù)據(jù)報發(fā)送到Connect方法建立的遠程主機。用法如下:

UdpClientudpClient=newUdpClient();udpClient.Connect(“”,51666);//指定默認(rèn)遠程主機和端口號Byte[]sendBytes=Encoding.Unicode.GetBytes(“你好!”);udpClient.Send(sendBytes,sendBytes.Length);//發(fā)送給默認(rèn)主機4.1.2UDP的廣播與組建程序的開發(fā)

2)publicUdpClient(intport);

如果創(chuàng)建UdpClient對象只是為了發(fā)送數(shù)據(jù)報,則可以用此構(gòu)造函數(shù)用法如下:UdpClientsendUdpClient=newUdpClient(0);

端口號置為0,表示讓系統(tǒng)自動的為其分配一個合適的端口號,這樣就不會發(fā)生端口號沖突的情況,因此這種形式是創(chuàng)建UdpClient對象最方便簡單的方式。4.1.2UDP的廣播與組建程序的開發(fā)3)publicUdpClient(IpEndPointlocalEp);

如果創(chuàng)建UdpClient對象是用來接收遠程主機發(fā)送到本地主機某個端口的數(shù)據(jù)報,則使用此構(gòu)造函數(shù)比較合適。用法如下:IPAddresslocalIp=Dns.GetHostAddress(Dns.GetHostName())[0];IPEndPointlocalIPEndPoint=newIPEndPoint(localIp,51666);UdpClientudpClient=newUdpClient(localIPEndPoint);

其中,localIPEndPoint是一個IPEndPoint(網(wǎng)絡(luò)端點)類型的對象實例,封裝了本機的一個確定的端口號。這樣一來,只要遠程主機知道本地主機的IP地址,就可以直接向本機的指定端口發(fā)送數(shù)據(jù)報。4.1.2UDP的廣播與組建程序的開發(fā)4)publicUdpClient(stringhostname,intport)

此構(gòu)造函數(shù)創(chuàng)建一個新的UdpClient實例,并自動分配合適的本地Ipv4地址和端口號,用于收發(fā)數(shù)據(jù)。用法如下:

UdpClientudpClient=newUdpClient(“”,51666);

這種構(gòu)造函數(shù)適用于向默認(rèn)主機發(fā)送數(shù)據(jù),或者只接收默認(rèn)遠程主機發(fā)來的數(shù)據(jù),而其他主機發(fā)送來的數(shù)據(jù)報自動丟棄的場合。4.1.2UDP的廣播與組建程序的開發(fā)UdpClient類常用的方法

4.1.3UDP下的同步于異步通信1.同步通訊。

同步發(fā)送數(shù)據(jù)時,可以調(diào)用UdpClient對象的Send方法。該方法有3種不同的重載形式,如下:1)PublicintSend(byte[]data,intlength,IPEndPointiep)

該方法將UDP數(shù)據(jù)報發(fā)送到位于指定遠程端點的主機。它的三個參數(shù)分別為:發(fā)送的數(shù)據(jù),希望發(fā)送的字節(jié)數(shù),遠程IPEndPoint對象,返回值為成功發(fā)送的字節(jié)數(shù)。用法如下:4.1.3UDP下的同步于異步通信privateUdpClientsendUdpClient;IPAddressremoteIp=Dns.GetHostAddress(Dns.GetHostName())[0];IPEndPointremoteIPEndPoint=newIPEndPoint(remoteIp,51666);byte[]sendbytes=Encoding.Unicode.GetBytes(“你好!”);UdpClient.Send(sendBytes,sendBytes.length,remoteIPEndPoint);4.1.3UDP下的同步于異步通信2)PublicintSend(byte[]data,intlength,stringhostname,intport)。

該方法將UDP數(shù)據(jù)報發(fā)送到指定遠程主機上的指定端口。它的四個參數(shù)分別為:發(fā)送的數(shù)據(jù),希望發(fā)送的字節(jié)數(shù),遠程主機名稱,遠程主機端口號,返回值為成功發(fā)送的字節(jié)數(shù)。用法如下:

UdpClientudpClient=newUdpClient();

byte[]sendbytes=Encoding.Unicode.GetBytes(“hello!”);udpClient.Send(sendBytes,sendBytes.Length,””,51666);4.1.3UDP下的同步于異步通信3)PublicintSend(byte[]data,intlength)該方法假定已經(jīng)通過Connect方法指定了遠程主機,因此只需要用Send方法指定發(fā)送的數(shù)據(jù)和希望發(fā)送的字節(jié)數(shù)即可,返回值為成功發(fā)送的字節(jié)數(shù)。用法如下:

UdpClientudpClient=newUdpClient(“”,51666);

byte[]sendbytes=Encoding.Unicode.GetBytes(“hello!”);

udpClient.Send(sendBytes,sendBytes.Length);4.1.3UDP下的同步于異步通信同步接收數(shù)據(jù)

我們可以用UDP的Receive方法來獲取接收遠程主機發(fā)過來的數(shù)據(jù)報。例如:

Publicbyte[]Receive(refIPEndPointremoteEP)

其中唯一的參數(shù)IPEndPoint表示發(fā)送方的IP地址和端口號。4.1.3UDP下的同步于異步通信1.異步通訊。

異步發(fā)送數(shù)據(jù)。

UdpClient類的每個同步方法,都有與之對應(yīng)的異步BeginSend和EndSend方法。所以異步通訊的BeginSend方法也有3種不同的重載形式,如下:

1)PublicintBeginSend(byte[]data,intlength,IPEndPointiep,

AsyncCallback

ac,Objectobj)。 2)PublicintBeginSend(byte[]data,intlength,string

hostname,intport,AsyncCallbackac,Objectobj)。 3)PublicintBeginSend(byte[]data,intlength,

AsyncCallbackac,Objectobj)。4.1.3UDP下的同步于異步通信對比同步通訊可以看出,對于每個BeginSend方法,在除了與同步Send方法具有相同的參數(shù)外,每個方法又增加了兩個參數(shù),一個是AsyncCallback類型的委托,用于指定異步操作完成時調(diào)用的方法。另一個是Object類型的對象,用于將狀態(tài)信息傳遞給回調(diào)方法。當(dāng)不使用的時候,這兩個新增的參數(shù)都可以置為null。下面以最常用的

BeginSend(byte[]data,intlength,IPEndPointiep,AsyncCallback

ac,Objectobj)為例,說明如何異步發(fā)送數(shù)據(jù)。4.1.3UDP下的同步于異步通信StaticvoidSendMessage(stringserver,stringmessage){

UdpClientudpClient=newUdpClient(server,51666);

byte[]sendByte=Encoding.Unicode.GetBytes(“hello!”);

//異步方式發(fā)送數(shù)據(jù)

IAsyncResultresult=

udpClient.BeginSend(sendByte,sendByte.length,null,null);

//在發(fā)送沒有結(jié)束之前可以做一些其他的操作,這里Thread.Sleep(100)代替 while(!result.IsCompleted) {

Thread.Sleep(100); }intsendbytes=udpClient.EndSend(result);//EndSend方法進行資源回收}

需要注意的是,在調(diào)用了BeginSend方法后,必須要調(diào)用UdpClient對象的EndSend方法,本例中,返回了實際發(fā)送的字節(jié)數(shù),并進行資源回收。4.1.3UDP下的同步于異步通信異步接收數(shù)據(jù)

異步接收數(shù)據(jù)將用到與同步接受數(shù)據(jù)時所用的Receive方法相對應(yīng)的BeginReceive方法。形式如下:

PublicIAsyncResultBeginReceive(AsyncCallbackrequestCallback,Objectstate);下面將以此為例說明如何運行此方法。

PrivatevoidReceiveData(){

UdpClientreceiveClient=newUdpClient(5656);//指定本機5656端口號用于接收。

receiveClient.BeginReceive(newAsyncCallback(ReceiveUdpClientCallback),receiveClient);}4.1.3UDP下的同步于異步通信

//回調(diào)方法

VoidReceiveUdpClient(IAsyncResultar)

{

UdpClientu=(UdpClient)ar.AsyncSate;

IPEndPointremote=null;

Byte[]receiveBytes=u.EndReceive(ar,refremote);

String

str=Encoding.UF8.GeString(receiveBytes,0,receiveBytes.Length); }4.2UDP的廣播與組播程序的開發(fā)

4.2.1

廣播與組播的基本概念

4.2.2組播組的加入與退出4.2.1廣播與組播的基本概念廣播的定義:指同時向子網(wǎng)中的所有主機發(fā)送信息。為了能讓所有的主機都能收到信息,發(fā)送的廣播消息必須包含一個特殊的IP地址,這個IP地址的主機號的二進制表現(xiàn)形式全為1。例如,子網(wǎng)掩碼為,則對于子網(wǎng)192.168.0,這個特殊的IP地址為55。又或?qū)τ贐類網(wǎng)絡(luò),使用子網(wǎng)掩碼,則本地廣播地址為55。廣播消息地址分為兩種類型,本地廣播和全球廣播。4.2.1廣播與組播的基本概念對于Ipv4來說,全球廣播使用所有位為1的IP地址,這個特定的廣播地址表明數(shù)據(jù)報的目的是網(wǎng)絡(luò)上的所有設(shè)備。但是由于路由器會自動過濾掉全球廣播,所以使用這個地址沒有實際意義。組播的定義: 當(dāng)接收者分布于多個不同的子網(wǎng)內(nèi)時,廣播將不再適用。此時可以用組播來實現(xiàn)。組播也叫多路廣播。所謂組播是將消息從一臺電腦發(fā)送到本網(wǎng)或全網(wǎng)內(nèi)選擇的計算機子集上,即發(fā)送到那些加入指定組播組的計算機上。組播組是開放的,每臺計算機都可以通過程序隨時加入和離開組播組。4.2.2組播組的加入與退出1)加入多路廣播組:用到方法JoinMulticastGroup。

JoinMulticastGroup方法有兩種常用的重載形式。1.JoinMulticastGroup(IPAddressmulticastAddr)用法如下:

UdpClientudpClient=newUdpClient(8001);

udpClient.JoinMulticastGroup(IPAddress.Parse(“”));

多路廣播地址的范圍從到54,如果指定的地址在此范圍之外,或者所請求的路由器不支持多路

溫馨提示

  • 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

提交評論