UDP 组播/多播实现步骤

Posted 追风的影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UDP 组播/多播实现步骤相关的知识,希望对你有一定的参考价值。

UDP组播

   实现服务器对客户端分组播放(发送数据)。

实现步骤:

  server.c

1、创建服务器套接字

#include <sys/types.h>          

#include <sys/socket.h>

int socket(int domain, int type, int protocol);   返回套接字

2、构建服务器地址结构

struct sockaddr_in serveraddr;

#include <strings.h>

bzero(&serveraddr, sizeof(serveraddr));

serveraddr.sin_family = AF_INET;                        

serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //IP        

serveraddr.sin_port = htons(SERVER_PORT);//端口

3、绑定地址

int bind(int sockfd, const struct sockaddr *addr,

                socklen_t addrlen);

4、构建组播属性结构

  struct ip_mreqn group;

  #include <arpa/inet.h>

  inet_pton(AF_INET,GROUP,&group.imr_multiaddr);//设置组播地址

  net_pton(AF_INET,"0.0.0.0",&group.imr_address);//设置本地地址

  group.imr_ifindex=if_nametoindex("ent0");//设置网卡接口

5、设置组播权限和属性

  setsockopt(sockfd,IPPROTO_IP,IP_MULTICAST_IF,&group,

  sizeof(group));//设置组播权限及选项

6、设置客户端组播地址

  struct sockaddr_in cliaddr;

  bzero(&cliaddr,sizeof(cliaddr));

  cliaddr.sin_family=AF_INET;

  inet_pton(AF_INET,GROUP,&cliaddr.sin_addr.s_addr);

  cliaddr.sin_port=htons(CLIENT_PORT);

7、发送数据

   sendto(sockfd,buf,strlen(buf),0,(structsockaddr*)&cliaddr,

   sizeof(cliaddr));//往组播地址发送信息,返回数据大小

client.c

1、创建客户端套接字

2、构建客户端地址结构

3、绑定地址

4、构建组播结构

5、设置组播权限和属性

6、接收数据

  #include <sys/types.h>

   #include <sys/socket.h>

   len=recvfrom(confd,buf,sizeof(buf),0,NULL,0);//接收数据

 

以上是关于UDP 组播/多播实现步骤的主要内容,如果未能解决你的问题,请参考以下文章

浅谈Android中的组播(多播)

如何接收组播 UDP?

单播广播组播多播

Rxjs: 单播和多播

CCNP路由实验之十 组播(多播)

单播多播(组播)和广播的差别