Buenas!!!!

A ver si alguien me puede ayudar con el tema de sockets. La parte de tcp digamos que lo controlo, pero en la parte de udp multicast ya estoy más perdido.

Tengo que hacer lo siguiente:

Tendremos un servidor que sabe realizar sumas y otro multiplicaciones.
Un cliente se conectará enviando un mensaje multicast y pedirá a esta la dirección del servidor de la operación que quiera realizar, suma o multiplicación. Posteriormente se conectará con el servidor de la operación y pedirá la ejecución de la operación


Tengo aquí 2 codigos, donde el emisor enviar un mensaje y el receptor lo escribe en pantalla.

Para el tema de 2 servidores, me tengo que crear un server1.c server2.c y del receptor enviar las direccion al emisor o se hace de otra formar?

Emisor.c

Código:
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

#define PUERTO_SALUDO 5000
#define GRUPO_SALUDO "228.5.6.7"

int main (void)
{
	struct sockaddr_in addr;
	int fd;
	char * mensaje =" Saludos ";
	
	if ((fd=socket (PF_INET,SOCK_DGRAM,0))<0)
	{
		printf("Error creando el socket\n");
		return -1;
	}
	
	addr.sin_family=AF_INET;
	addr.sin_addr.s_addr=inet_addr(GRUPO_SALUDO);
	addr.sin_port=htons(PUERTO_SALUDO);
	
	while(1)
	{
		if (sendto(fd,mensaje,strlen(mensaje)+1,0,(struct sockaddr *) &addr, sizeof(addr))<0)
	    {
	    	printf("Error enviando mensaje\n");
	    	return -1;
	    }
		sleep (1);
	}
}
Receptor.c

Código:
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <stdio.h>

#define PUERTO_SALUDO 5000
#define GRUPO_SALUDO "228.5.6.7"
#define MSGBUFSIZE 256

int main (void)
{
	struct sockaddr_in addr;
	int fd, nbytes;
	unsigned int addrlen;
	struct ip_mreq mreq;
	char msgbuf[MSGBUFSIZE];
	
	if ((fd=socket(AF_INET,SOCK_DGRAM,0))<0)
	{
		printf ("Error al crear el socket\n");
		return -1;
	}
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = htonl(INADDR_ANY);
	addr.sin_port=htons(PUERTO_SALUDO);
	
	/* codigo utilizado para poder ejecutar varios procesos en la misma máquina 
	 * utilizando una puerta comun
	 */
	int reuse = 1;
	if (setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(int))<0)
	{
		printf ("Error al reusar\n");
		return -1;
	}

	if (bind(fd,(struct sockaddr*) &addr,sizeof(addr))<0)
	{
		printf ("Error al publicar en la red\n");
		return -1;
	}	
		
	mreq.imr_multiaddr.s_addr =inet_addr(GRUPO_SALUDO);
	
	mreq.imr_interface.s_addr=htonl(INADDR_ANY);
	if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mreq,sizeof(mreq))<0)
	{
		printf ("Error al conectarnos al grupo\n");
		return -1;
	}	
	
	while (1)
	{
		addrlen= sizeof(addr);
		if ((nbytes=recvfrom(fd,msgbuf,MSGBUFSIZE,0,(struct sockaddr*) &addr,&addrlen))<0)
		{
			printf ("Error en la recepcion\n");
			return -1;
		}
		puts(msgbuf);
	}
}
Gracias!!!!!