23,125
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <linux/in.h>
int main(int argc, char** argv)
{
int s = socket(AF_INET,SOCK_DGRAM, 0);
struct sockaddr_in recv_addr = {0};
recv_addr.sin_addr.s_addr = INADDR_ANY;
recv_addr.sin_family = AF_INET;
recv_addr.sin_port = htons(8000);
int err = bind(s, (struct sockaddr*)&recv_addr, sizeof(recv_addr));
if (err < 0)
{
perror("bind()");
return -1;
}
int loop = 1;
// 设置循环许可
err = setsockopt(s,IPPROTO_IP, IP_MULTICAST_LOOP,&loop,sizeof(loop));
struct ip_mreq mreq;
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
mreq.imr_multiaddr.s_addr = inet_addr("224.0.1.99");
// 加入组播
err = setsockopt(s, IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));
if (err<0)
{
perror("setsockopt:ADD");
return 0;
}
char buf[256] = "";
while(1) // 无循环无所论,关键是接收
{
recvfrom(s,buf,256,0,0,0);
puts(buf);
}
err = setsockopt(s, IPPROTO_IP,IP_DROP_MEMBERSHIP,&mreq,sizeof(mreq));
return (EXIT_SUCCESS);
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <linux/in.h>
int main(void)
{
int s;
struct sockaddr_in mcast_addr;
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s == -1)
{
perror("Opening socket");
exit(0);
}
memset(&mcast_addr, 0, sizeof (mcast_addr));
mcast_addr.sin_family = AF_INET;
mcast_addr.sin_addr.s_addr = inet_addr("224.0.1.99");
mcast_addr.sin_port = htons(8000);
while (1)
{
int n = sendto(s,
"test from broadcast",
sizeof ("test from broadcast"),
0,
(struct sockaddr *) &mcast_addr,
sizeof (mcast_addr));
if (n < 0)
{
perror("sendto");
exit(EXIT_FAILURE);
}
sleep(5);
}
exit(EXIT_SUCCESS);
}