




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 雙方自愿合作合同范例
- 廠家進貨協(xié)議合同范本
- 專利設(shè)備合同范本
- 個人餐飲員工合同范本
- 廠家物流合同范本
- 兼職項目加盟合同范本
- aia 系列合同范本
- 廚房煙道清洗合同范本
- 廠子擔(dān)保合同范本
- 單位洗澡間改造合同范本
- 家校共育之道
- DeepSeek入門寶典培訓(xùn)課件
- 西安2025年陜西西安音樂學(xué)院專職輔導(dǎo)員招聘2人筆試歷年參考題庫附帶答案詳解
- 《作文中間技巧》課件
- 廣東省2025年中考物理仿真模擬卷(深圳)附答案
- 2025屆八省聯(lián)考 新高考適應(yīng)性聯(lián)考英語試題(原卷版)
- 新蘇教版一年級下冊數(shù)學(xué)第1單元第3課時《8、7加幾》作業(yè)
- 2024年山東電力高等專科學(xué)校高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 《平面廣告賞析》課件
- 人教鄂教版六年級下冊科學(xué)全冊知識點
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計規(guī)范
評論
0/150
提交評論