无法接收多播数据

时间:2018-01-01 13:11:24

标签: c networking

我正在开发一个应用程序,其中我需要发送和接收一些多播数据。我编写了一个简单的多播数据接收器程序用于测试目的,但由于某些原因,我无法接收多播数据。这是我的示例代码:

#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;

}

我也禁用了防火墙,但仍然没有运气。

0 个答案:

没有答案