Advertisement
  Home arrow C Source arrow Multicast Client Example Wednesday, 20 August 2008 
Main Menu
 Home
 News
 FAQ
 C Source
 The Web Links
 Contact Us
 Administrator

Login Form
Username

Password

Remember me
Forgotten your password?
No account yet? Create one

Statistics
OS: Windows
PHP: 5.2.7-dev
MySQL: 4.0.15-nt
Time: 03:05
Members: 480
Hits: 503457
News: 12
WebLinks: 6

Online Users
No Users Online

Newsflash
The Triple Play Forum, the European Advanced Networking Test Center (EANTC) and Upper Side will organize a multi-vendor public interoperability showcase in the area of Triple Play services during the TVoDSL Conference, to be held January 25-28 2005, with a private hot-staging test event in Berlin, Germany two weeks before.
The interoperability test and demonstration addresses IP multicast and QoS transport: DSLAMs , DSL modems , FTTX CPE   switches and Ethernet Switches


Multicast Client Example   PDF  Print  E-mail 
Contributed by Bilbo Baggins  
Tuesday, 01 June 2004
IP Multicast source for client

/*  multirec.c - see also diewitherror.c and multisnd.c */

/* compile  $ cc -o multirec.exe multirec.c diewitherror.c */

 

/*                   program      multicast ip  port */

/* useage example $ ./multirec.exe 224.0.22.1 9210  */

 

/* tested with cygwin gcc win32- linux gcc -sun */

 

#include <stdio.h>      /* for printf() and fprintf() */

#include <sys/socket.h> /* for socket(), connect(), sendto(), and recvfrom() */

#include <arpa/inet.h>  /* for sockaddr_in and inet_addr() */

#include <stdlib.h>     /* for atoi() and exit() */

#include <string.h>     /* for memset() */

#include <unistd.h>     /* for close() */

 

 

#include <time.h> /* modified for timestamps */

 

 

 

#define MAXRECVSTRING 255  /* Longest string to receive */

 

void DieWithError(char *errorMessage);  /* External error handling function */

 

int main(int argc, char *argv[])

{

    int sock;                         /* Socket */

    struct sockaddr_in multicastAddr; /* Multicast Address */

    char *multicastIP;                /* IP Multicast Address */

    unsigned short multicastPort;     /* Port */

    char recvString[MAXRECVSTRING+1]; /* Buffer for received string */

    int recvStringLen;                /* Length of received string */

    struct ip_mreq multicastRequest;  /* Multicast address join structure */

 

    if (argc != 3)    /* Test for correct number of arguments */

    {

        fprintf(stderr,"Usage: %s <Multicast IP> <Multicast Port>\n", argv[0]);

        exit(1);

    }

 

    multicastIP = argv[1];        /* First arg: Multicast IP address (dotted quad) */

    multicastPort = atoi(argv[2]);/* Second arg: Multicast port */

 

    /* Create a best-effort datagram socket using UDP */

    if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)

        DieWithError("socket() failed");

 

    /* Construct bind structure */

    memset(&multicastAddr, 0, sizeof(multicastAddr));   /* Zero out structure */

    multicastAddr.sin_family = AF_INET;                 /* Internet address family */

    multicastAddr.sin_addr.s_addr = htonl(INADDR_ANY);  /* Any incoming interface */

    multicastAddr.sin_port = htons(multicastPort);      /* Multicast port */

 

    /* Bind to the multicast port */

    if (bind(sock, (struct sockaddr *) &multicastAddr, sizeof(multicastAddr)) < 0)

        DieWithError("bind() failed");

 

    /* Specify the multicast group */

    multicastRequest.imr_multiaddr.s_addr = inet_addr(multicastIP);

    /* Accept multicast from any interface */

    multicastRequest.imr_interface.s_addr = htonl(INADDR_ANY);

    /* Join the multicast address */

    if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void *) &multicastRequest,

          sizeof(multicastRequest)) < 0)

        DieWithError("setsockopt() failed");

 

    /* Receive a single datagram from the server */

    /* Start loop here */

 

int c;

int x1 = 1000000; /* initialize loop variables */

int x2 = 0;

 

while (x2 < x1)

{

/* x1++ */

/* uncomment the line above to have a limit */

if ((recvStringLen = recvfrom(sock, recvString, MAXRECVSTRING, 0, NULL, 0)) < 0)

        DieWithError("recvfrom() failed");

 

    recvString[recvStringLen] = '\0';

 

 

 

time_t tim=time(NULL);  /* get time stamp to print with recieved data */

             char *s=ctime(&tim);

             s[strlen(s)-1]=0;        // remove \n

         /*    printf("it is %s now.\n", s); */

     

    printf("Time Received: %s : %s\n", s, recvString);    /* Print the received string */

 

}

    close(sock);

    exit(0);

 

} /* main */

 

   

 

 

 

Last Updated ( Tuesday, 29 June 2004 )

Browser Prefs
Add to Favorites
Make Home Page

Newsfeeds
Internet:Business News
Wed, 20 Aug 2008 02:55
Aspiring content distributor cuts 20 percent of staff but denies the Comcast-FCC issue has anything to do with it.
BitTorrent Hits a Non-Comcast Bump
Tech stocks rallied Monday after a Citigroup analyst said he expects sales of Amazon's electronic reader to exceed expectations.
Amazon Kindles Tech Rally
For a day at least, positive inflation signs overcame credit market worries. Research in Motion led the Nasdaq higher.
Stocks Rocket as Greenback Gains
BBC: Technology
Wed, 20 Aug 2008 02:55
BBC News
The government should do more to curb waste using tax as an incentive, a House of Lords committee has said.
Call to tackle UK business waste
Two British men are preparing to break the world land-speed record for a wind-powered vehicle.
Bid for world land-speed record
Intel's chairman tells developers a better education system is vital to the economic well-being and future of the US.
Intel cites US education 'crisis'

Most Read
Multicast Client Example
Multicast Server Example
Welcome to IP Multicast Standards Initiative
diewitherror.c Multicast Client & Server
What ipmulticast.com will provide

: Home :: News :: FAQ :: C Source :: The Web Links :: Contact Us :: Administrator :
powered by world multicast ietf rmt wg ietf rmt wg