我正在开发一个应用程序,其中我需要发送和接收一些多播数据。我编写了一个简单的多播数据接收器程序用于测试目的,但由于某些原因,我无法接收多播数据。这是我的示例代码:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/ioctl.h>
#include <netinet/in.h>
#include<pthread.h>
void* recvd(void* t)
{
printf("thread created\n");
long socket_fd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
struct sockaddr_in muladdr;
memset(&muladdr,0,sizeof(muladdr));
muladdr.sin_family=AF_INET;
muladdr.sin_port=htons(3454);
inet_aton("15.45.234.3",(in_addr*)&muladdr.sin_addr.s_addr);
struct ip_mreq mreq;
memset(&mreq,0,sizeof(mreq));
inet_aton("224.1.2.3",(in_addr*)&mreq.imr_multiaddr.s_addr);
inet_aton("15.45.234.3",(in_addr*)&mreq.imr_interface.s_addr);
setsockopt(socket_fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));
bind(socket_fd,(sockaddr *)&muladdr,sizeof(muladdr));
char buf[100];
memset(buf,0,100);
long lSize=recvfrom(socket_fd,buf,100,0,NULL,NULL);
if(lSize)
{
printf("recvd data: %s\n",buf);
}
close(socket_fd);
return NULL;
}
int main(int argc,char* argv[])
{
pthread_t pp;
pthread_create(&pp,NULL,recvd,NULL);
sleep(2);
long socket_fd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
int ttl=25;
setsockopt(socket_fd,IPPROTO_IP,IP_MULTICAST_TTL, &ttl, sizeof(ttl));
struct sockaddr_in muladdr;
memset(&muladdr,0,sizeof(muladdr));
muladdr.sin_family=AF_INET;
muladdr.sin_port=htons(3454);
inet_aton("224.1.2.3",(in_addr*)&muladdr.sin_addr.s_addr);
char arr[]="Hello World!";
printf("sending data\n");
long result=sendto(socket_fd,arr,sizeof(arr),0,(sockaddr *)&muladdr,sizeof(muladdr));
if(result==-1)
{
perror("Error in sending data");
exit(EXIT_FAILURE);
}
printf("sent data\n");
pthread_join(pp,NULL);
close(socket_fd);
return 0;
}
我也禁用了防火墙,但仍然没有运气。