IP多路廣播 enterlc(翻譯)
發(fā)表時(shí)間:2024-06-15 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]介紹:目前,多點(diǎn)廣播應(yīng)用非常廣泛。隨著網(wǎng)絡(luò)的帶寬不斷的增加以及多媒體流的利用,廣播將在不久的將來(lái)成為一種被廣泛利用的方法。 什么是IP多路廣播? IP多路廣播是一種寬帶存儲(chǔ)技術(shù),他可以用來(lái)解決網(wǎng)絡(luò)上的信息擁擠,通過(guò)向上千個(gè)接收者同時(shí)發(fā)送單一的信息流。他的特征是單想傳播而無(wú)反回信號(hào)。 這個(gè)觀點(diǎn)可以被...
介紹:
目前,多點(diǎn)廣播應(yīng)用非常廣泛。隨著網(wǎng)絡(luò)的帶寬不斷的增加以及多媒體
流的利用,廣播將在不久的將來(lái)成為一種被廣泛利用的方法。
什么是IP多路廣播?
IP多路廣播是一種寬帶存儲(chǔ)技術(shù),他可以用來(lái)解決網(wǎng)絡(luò)上的信息擁擠,通過(guò)
向上千個(gè)接收者同時(shí)發(fā)送單一的信息流。他的特征是單想傳播而無(wú)反回信號(hào)。
這個(gè)觀點(diǎn)可以被認(rèn)為與衛(wèi)星和電視之間的廣播相似。一個(gè)單一的衛(wèi)星向地面上的許多接收者發(fā)送信息,數(shù)據(jù)流沿著發(fā)送路徑向所經(jīng)過(guò)的路由器和主機(jī)發(fā)送信息,同時(shí)這些路由器和主機(jī)能復(fù)制數(shù)據(jù)流,再向其他路由器和主機(jī)發(fā)送。
IP多路廣播的需要:
IP多路廣播中數(shù)據(jù)流所經(jīng)過(guò)的所有路由器必須可以使用廣播。對(duì)于Internet
廣播,所有的傳輸設(shè)備必須是MBONE(一種多媒體骨架結(jié)構(gòu),可以在全球范圍內(nèi)傳輸圖象)中的一員。不過(guò),隨著越來(lái)越多的廠家開(kāi)發(fā)出支持IP廣播的路由器,MBONE將逐漸退出歷史舞臺(tái)。
系統(tǒng)需要:
1.支持IP多路廣播的操作系統(tǒng),如Windows2000,XP. Berkeley Sockets, Windows Sockets 2 and Apple Macintosh Open Transport都支持IP多路廣播。
2..NET Framework API. Microsoft.Net Framework為應(yīng)用程序訪問(wèn)Internet提供了分層的、可擴(kuò)展的以及受管轄的網(wǎng)絡(luò)服務(wù),其名字空間System.Net和System.Net.Sockets包含豐富的類可以開(kāi)發(fā)多種網(wǎng)絡(luò)應(yīng)用程序。.Net類采用的分層結(jié)構(gòu)允許應(yīng)用程序在不同的控制級(jí)別上訪問(wèn)網(wǎng)絡(luò),開(kāi)發(fā)人員可以根據(jù)需要選擇針對(duì)不同的級(jí)別編制程序,這些級(jí)別幾乎囊括了Internet的所有需要--從socket套接字到普通的請(qǐng)求/響應(yīng),更重要的是,這種分層是可以擴(kuò)展的,能夠適應(yīng)Internet不斷擴(kuò)展的需要。
這里,我將通過(guò)C#提供一個(gè)例子來(lái)實(shí)現(xiàn)IP多路廣播
1.向一個(gè)廣播組發(fā)送數(shù)據(jù)
由于是單向傳輸,所以無(wú)須握手,在這里我們用UDP協(xié)議。
//創(chuàng)建一個(gè)socket
Socket s=new Socket(AddressFamily.InterNetwork, _
SocketType.Dgram, _
ProtocolType.Udp);
//AddressFamily.InterNetwork IP 版本 4 的地址。
//SocketType.Dgram 支持?jǐn)?shù)據(jù)文報(bào),即最大長(zhǎng)度固定(通常很。┑臒o(wú)連接、不可靠消息。消息可能//會(huì)丟失或重復(fù)并可能在到達(dá)時(shí)不按順序排列。Dgram 類型的 Socket 在發(fā)送和接收數(shù)據(jù)之前不需要//任何連接,并且可以與多個(gè)對(duì)方主機(jī)進(jìn)行通訊。
//SocketType 隱式地指示將在 AddressFamily 內(nèi)使用哪一個(gè) ProtocolType。例如,當(dāng) SocketType //為 Dgram 時(shí),ProtocolType 始終為 Udp。當(dāng) SocketType 為 Stream 時(shí),ProtocolType 始終為 //Tcp。
//多路廣播數(shù)據(jù)包的有效 IP 地址范圍為 224.0.0.0 到 239.255.255.255 之間。
IPAddress ip=IPAddress.Parse("224.5.6.7");
s.SetSocketOption(SocketOptionLevel.IP, _
SocketOptionName.AddMembership, _
new_MulticastOption(ip));
//SocketOptionLevel參數(shù)解釋:
//IP 套接字選項(xiàng)應(yīng)用于 IP 套接字。
//Socket 套接字選項(xiàng)應(yīng)用于套接字本身。
//Tcp 套接字選項(xiàng)應(yīng)用于 TCP 套接字。
//Udp 套接字選項(xiàng)應(yīng)用于 UDP 套接字。
//SocketOptionName.AddMembership
//AddMembership 添加一個(gè) IP 組成員。
s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 2);
//SocketOptionName.MulticastTimeToLiveIP多路廣播生存時(shí)間。
IPEndPoint ipep=new IPEndPoint(ip, 4567);
s.Connect(ipep);
// 創(chuàng)建發(fā)送的數(shù)據(jù) ABCDEFGHIJ
byte[] b=new byte[10];
for(int x=0;x<b.Length;x++) b[x]=(byte)(x+65);
//發(fā)送數(shù)據(jù)
s.Send(b,b.Length,SocketFlags.None);
//關(guān)閉socket
s.Close();
2.多路廣播的接收數(shù)據(jù)程序:
我們已經(jīng)發(fā)送字母 ABCDEFGHIJ 到廣播組224.5.6.7 通過(guò)端口 4567. 所有監(jiān)聽(tīng)的程序都將收到這組數(shù)據(jù)
Socket s=new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp);
//與和發(fā)送方相似的方法建立一個(gè)socket
IPEndPoint ipep=new IPEndPoint(IPAddress.Any, 4567);
s.Bind(ipep);
//任何監(jiān)聽(tīng)端口為4567的IP都將收到數(shù)據(jù)
IPAddress ip=IPAddress.Parse("224.5.6.7");
s.SetSocketOption(SocketOptionLevel.IP, _
SocketOptionName.AddMembership, _
new MulticastOption(ip,IPAddress.Any));
//將socket加入廣播組 224.5.6.7.
byte[] b=new byte[1024];
s.Receive(b);
string str = System.Text.Encoding.ASCII.GetString(b,0,b.Length);
Console.WriteLine(str.Trim());
//于是我們可以接收到這個(gè)廣播組所發(fā)出的任何數(shù)據(jù)。