用UDP通信实现组播通信(多播)
组播通信特点:发送端创建的聊天组,你想加入就加入,不想加入就不接收(想加入才把数据发给组播地址)
Ip地址分类A, B, C, D(组播地址)
——224.0.0.0 — 239.255.255.255
原理图:
流程:
组播发送端
1, 创建UDP套接字socket(AF_INET, SOCK_DGRAM, 0)
2, 发送数据给组播地址sendto(sockfd, 发送的数据data, 数据长度size, 0, 组播地址, 地址长度)
组播接收端
1, 创建UDP套接字socket(AF_INET, SOCK_DGRAM, 0)
2, 绑定地址端口 bind
3, 加入到某个组播组(退出组播组) setsockopt
完整代码实现如下:
//发送端
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <stdbool.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
//1.创建套接字
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if(sockfd < 0)
{
perror("socket fail");
return -1;
}
//2.发送数据
struct sockaddr_in destAddr