ip多播(也稱多址廣播或組播)技術,是一種允許一台或多台主機(多播源)傳送單一資料報到多台主機(一次的,同時的)的tcp/ip網路技術。
通俗點講,多播也稱組播,大概可以理解為分組廣播的意思,是介於單播和廣播之間的一種通訊機制,使用多播方式,可以實現對區域網內一組特定的主機進行通訊,對區域網節點分組,加入該分組即可接收該分組的訊息,而未加入分組則收不到訊息。
1. 建立套接字介面
2. 設定套接字屬性
3. 加入特定的多播組
4. 傳送/接收資訊
5. 離開多播組
6. 關閉套接字
* 若只是發資訊,可不用加入組,直接向該組傳送資訊即可
1. ip_multicase_ttl
設定超時時間, 範圍是0~255
2. ip_multicast_if
指定使用的網路介面,如果主機有多個網路介面,不設定該選項則使用預設介面傳送接收,使用該選項可指定某特定網路介面傳送和接收資訊
3. ip_multicast_loop
設定是否暈薰資料傳送到本地loop位址
4. ip_add_membership/ip_drop_membership
加入/離開特定的多播組, 操作乙個struct ip_mreq結構體,裡面包含帶加入/離開組的資訊
(只傳送)
#define mult_addr "224.0.0.250"
#define mult_port 9999
#define msg "multicast message"
int main()
memset(&mult_addr, 0, sizeof(mult_addr));
mult_addr.sin_family = af_inet;
mult_addr.sin_port = htons(mult_port);
mult_addr.sin_addr.s_addr = inet_addr(mult_addr);
socklen_t l = sizeof(mult_addr);
unsigned char ttl = 20;
l = sizeof(ttl);
setsockopt(sock, ipproto_ip, ip_multicast_ttl, (void *)&ttl, l);
l = sizeof(mult_addr);
while (1)
}close(sock);
return
0;}
(只接收)
#define mult_addr "224.0.0.250"
#define mult_port 9999
int main()
memset(&addr, 0, sizeof(addr));
addr.sin_family = af_inet;
addr.sin_port = htons(mult_port);
addr.sin_addr.s_addr = htonl(inaddr_any);
if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)))
memset(&mreq, 0, sizeof(mreq));
mreq.imr_multiaddr.s_addr = inet_addr(mult_addr);
mreq.imr_inte***ce.s_addr = htonl(inaddr_any);
char buf[64];
socklen_t l = sizeof(addr);
if (setsockopt(sock, ipproto_ip, ip_add_membership, &mreq, sizeof(mreq)) < 0)
while (1)
}setsockopt(sock, ipproto_ip, ip_drop_membership, &mreq, sizeof(mreq));
close(sock);
return
0;}
source code 網路程式設計(0) multicast
也稱作組播 優點 缺點 1.與單播相比沒有原生的糾錯機制,但可以從應用層實現 2.需要路由器及網路協議棧支援 d類位址用於多播 224.0.0.0 239.255.255.2551.區域性多播位址 路由器及其他用途保留的位址,路由器不 224.0.0.0 224.0.0.2552.預留多播位址 應用...
UNIX網路程式設計 廣播與多播
前言 繼續補上我的部落格,這幾天專注把 unix網路程式設計 的內容總結。1.單播與廣播的比較 單播 過程 中間主機的乙太網介面看到該幀,並將它的目的乙太網與自己的乙太網位址進行比較。由於二者不相等,介面便忽略該幀。因此,單播幀不會對這台主機造成任何額外開銷,因為忽略它們的是介面而不是主機。右邊主機...
網路程式設計 Linux多播簡單實現
在測試多時先確定測試的介面 網絡卡 是否已經開啟多播功能,如下 圖.1其中running multicast表示開啟了多播功能,可用ifconfig命令開啟 多播資料傳送端 include include include include include include include include...