在測試多時先確定測試的介面(網絡卡)是否已經開啟多播功能,如下:
圖.1其中running multicast表示開啟了多播功能,可用ifconfig命令開啟
多播資料傳送端:
#include #include #include #include #include #include #include #include #include int main(int argc, char *argv)
struct sockaddr_in servsend;
socklen_t len = sizeof(struct sockaddr_in);
int ret;
int sendfd = socket(af_inet, sock_dgram, 0);
/* 目的位址為多播位址 */
servsend.sin_addr.s_addr = inet_addr(argv[1]);
servsend.sin_port = htons(atoi(argv[2]));
servsend.sin_family = af_inet;
u_char off = 1;
/*開啟外出資料報的回饋*/
setsockopt(sendfd, ipproto_ip, ip_multicast_loop, &off, sizeof(off));
/* 選擇多播外出介面 */
char buf[256];
struct in_addr in;
in.s_addr = inet_addr("192.168.1.115");
setsockopt(sendfd, ipproto_ip, ip_multicast_if, &in, sizeof(in));
while (1)
sleep(2);
}return 0;
}
多播資料接受端:
#include #include #include #include #include #include #include #include #include int main(int argc, char *argv)
int ret;
struct sockaddr_in servrecv;
int len = sizeof(servrecv);
int recvfd = socket(af_inet, sock_dgram, 0);
const int on = 1;
ret = setsockopt(recvfd, sol_socket, so_reuseaddr, &on, sizeof(on));
if (ret < 0)
servrecv.sin_port = htons(atoi(argv[2]));
servrecv.sin_addr.s_addr = htonl(inaddr_any);
servrecv.sin_family = af_inet;
ret = bind(recvfd, (struct sockaddr *)&servrecv, len);
if (ret < 0)
/* 加入多播組 */
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr(argv[1]);
mreq.imr_inte***ce.s_addr = inet_addr("192.168.1.115");
ret = setsockopt(recvfd, ipproto_ip, ip_add_membership, &mreq, sizeof(mreq));
if (ret < 0)
struct sockaddr_in in;
while (1)
printf("%s\n", buf);
} return 0;
}
網路程式設計多播 Multicast
ip多播 也稱多址廣播或組播 技術,是一種允許一台或多台主機 多播源 傳送單一資料報到多台主機 一次的,同時的 的tcp ip網路技術。通俗點講,多播也稱組播,大概可以理解為分組廣播的意思,是介於單播和廣播之間的一種通訊機制,使用多播方式,可以實現對區域網內一組特定的主機進行通訊,對區域網節點分組,...
UNIX網路程式設計 廣播與多播
前言 繼續補上我的部落格,這幾天專注把 unix網路程式設計 的內容總結。1.單播與廣播的比較 單播 過程 中間主機的乙太網介面看到該幀,並將它的目的乙太網與自己的乙太網位址進行比較。由於二者不相等,介面便忽略該幀。因此,單播幀不會對這台主機造成任何額外開銷,因為忽略它們的是介面而不是主機。右邊主機...
TCP IP網路程式設計 多播與廣播
前言 想想這麼一種情況,網路電台可能需要同時向成千上萬的使用者傳輸相同的資料,如果用我們以前講過的傳輸形式,每個使用者都傳輸一次,這樣肯定是不合理的。因此,就引入了多播技術來解決這個問題,它可以同時向大量使用者傳送相同資料。其基本原理是這樣的 有個多播組,只要加入這個組裡的所有客服端,服務端傳送的資...