实现服务器
首先组播地址加入到路由表
My_system("route add -net 224.0.0.0 netmask 224.0.0.0 eth0");
创建SOCKET
sockfd=socket(AF_INET,SOCK_DGRAM,0);
设置端口resuse,int i= 1
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (const char *)&i, sizeof(i)
设置TTL ,int i = 10
setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_TTL, (const char *)&i, sizeof(i)
关闭回路 int i = 0;
setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, (const char *)&i, sizeof(i)
加入组播
struct ip_mreq mreq;
memset(&mreq, 0, sizeof(mreq));
mreq.imr_interface.s_addr = inet_addr(local_ip); //0.0.0.0
mreq.imr_multiaddr.s_addr = inet_addr(ip);//我这里是224.0.1.99
int ret = setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mreq,sizeof(mreq));
配置本地信息
memset(addr,0,sizeof(struct sockaddr_in));
addr->sin_family=AF_INET;
addr->sin_port=htons(port); //我用的 9898
addr->sin_addr.s_addr = inet_addr(ip); //"0.0.0.0"
绑定
bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr));
后面就是UDP的收发了