概述
#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 技术所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复