網路程式設計多播 Multicast

2021-08-09 01:54:42 字數 2096 閱讀 7127

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...