我是靠谱客的博主 震动河马,最近开发中收集的这篇文章主要介绍linux 多播ip设置,Linux 网络的多播 IP 技术,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include char * host_name = "224.0.0.1"; /* 多播IP地址 */

int port = 6789; int main(void) {   struct ip_mreq command;   int loop

= 1; /* 多播循环 */   int iter = 0;   int sin_len;   char message[256];

int socket_descriptor; struct sockaddr_in sin; struct hostent

*server_host_name; if((server_host_name = gethostbyname(host_name)) ==

0) {   perror("gethostbyname");   exit(EXIT_FAILURE);   }

/*bzero(&sin, sizeof(sin));*/ memset(&sin, 0, sizeof(sin));

sin.sin_family = AF_INET;   sin.sin_addr.s_addr = htonl(INADDR_ANY);

sin.sin_port = htons(port);   if((socket_descriptor = socket(PF_INET,

SOCK_DGRAM, 0)) == -1) { perror("socket"); exit(EXIT_FAILURE); } /*

调用bind之前,设置套接口选项启用多播IP支持*/ loop = 1; if(setsockopt(socket_descriptor,

SOL_SOCKET, SO_REUSEADDR, &loop, sizeof(loop)) < 0) {

perror("setsockopt:SO_REUSEADDR"); exit(EXIT_FAILURE);   }

if(bind(socket_descriptor, (struct sockaddr *)&sin, sizeof(sin))

< 0) {   perror("bind");   exit(EXIT_FAILURE);   } /*

在同一个主机上进行广播设置套接口, 作用是方便单个开发系统上测试多播IP广播 */ loop = 1;

if(setsockopt(socket_descriptor, IPPROTO_IP, IP_MULTICAST_LOOP,

&loop, sizeof(loop)) < 0) {

perror("setsockopt:IP_MULTICAST_LOOP"); exit(EXIT_FAILURE);   }   /*

加入一个广播组。进一步告诉Linux内核, 特定的套接口即将接受广播数据*/   command.imr_multiaddr.s_addr =

inet_addr("224.0.0.1");   command.imr_interface.s_addr =

htonl(INADDR_ANY); if(command.imr_multiaddr.s_addr == -1) {

perror("224.0.0.1 not a legal multicast address");

exit(EXIT_FAILURE); } if (setsockopt(socket_descriptor, IPPROTO_IP,

IP_ADD_MEMBERSHIP,   &command, sizeof(command)) < 0) {

perror("setsockopt:IP_ADD_MEMBERSHIP");   }   while(iter++ < 8) {

sin_len = sizeof(sin);   if(recvfrom(socket_descriptor, message, 256,

0,   (struct sockaddr *)&sin, &sin_len) == -1) {

perror("recvfrom");     }   printf("Response #%-2d from server: %sn",

iter, message);     sleep(2);   }   /* 接受8个广播后退出 */

if(setsockopt(socket_descriptor, IPPROTO_IP, IP_DROP_MEMBERSHIP,

&command, sizeof(command)) < 0) {

perror("setsockopt:IP_DROP_MEMBERSHIP");   }

close(socket_descriptor); exit(EXIT_SUCCESS);}

3、运行 Linux 多播 IP 程序

行程序,打开两个终端窗口并在每个窗口中输入以上的源代码。在一个窗口中键入 make,编译 broadcast 和 listen

这两个的可执行文件,由 GUN make 建立一个 Makfiles 文件。GUN make 是 Linux

系统中一个自动生成和维护目标程序的工具。

在一个窗口中通过执行 ./broadcast,在另一个的窗口执行 ./listen,启动收听程序,你应该看到如下输出:

#./listenResponse

#1 form sever :test from broadcast Response #2 form sever :test from

broadcast Response #3 form sever :test from broadcast Response #4 form

sever :test from broadcast Response #5 form sever :test from broadcast

Response #6 form sever :test from broadcast Response #7 form sever

:test from broadcast Response #8 form sever :test from broadcast #

4、总结

Linux

多播 IP

是一种同时向价格进程高效的发送信息的介绍。多播传输中,数据被发送到接收者的多播地址,而不是每个接收者的单播地址,发送者只发送一个数据拷贝,源端到

目标端路径上的中间节点复制该数据。现在多播 IP 已经广泛应用于网络游戏、视频广播的领域。

最后

以上就是震动河马为你收集整理的linux 多播ip设置,Linux 网络的多播 IP 技术的全部内容,希望文章能够帮你解决linux 多播ip设置,Linux 网络的多播 IP 技术所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部