16 Mayıs 2007 Çarşamba

Multicast Routing P2

Efennim mrouted ın çalıştığını görmüştük , şimdi server addettiğimiz cihazdan bir program ile (ben VLC kullandım ) bir porta (1234 olabilir) bir multicast ip ile (224.1.1.1 olabilir) datayı basıyoruz (ben bi mp3 yolladım)

akabinde bi client kodu yazıyoruz (gerçi burda yazılmışı var)

#include

#define BUFFSIZE 255
#define GROUP_ADDR "224.1.1.1"
#define PORT_NUM 1234


int main(void)
{
unsigned int multi_server_sock;
struct ip_mreq mreq;
struct sockaddr_in client_addr;
unsigned int addr_len;
unsigned char buffer[BUFFSIZE];
int retcode;

multi_server_sock = socket(AF_INET, SOCK_DGRAM, 0);
mreq.imr_multiaddr.s_addr = inet_addr(GROUP_ADDR);
mreq.imr_interface.s_addr = INADDR_ANY;

client_addr.sin_family = AF_INET;
client_addr.sin_addr.s_addr = INADDR_ANY;
client_addr.sin_port = htons(PORT_NUM);

retcode = bind(multi_server_sock,(struct sockaddr *) &client_addr, sizeof(struct sockaddr));

if (retcode < 0){
printf("bind hata kodu : %d\n",retcode);
return;
}

retcode = setsockopt(multi_server_sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char *) &mreq, sizeof(mreq));

if (retcode < 0){
printf("sockopt hata kodu : %d\n",retcode);
return;
}

addr_len = sizeof(client_addr);
printf("addr_len = %d\n",addr_len);
while (1){
if ( (retcode = recvfrom(multi_server_sock, buffer, sizeof(buffer), 0,
(struct sockaddr *) &client_addr, &addr_len)) < 0 ){
printf("recvrom hatasi = %d\n",retcode);
return;
}

printf("%s\n",buffer);
}

close(multi_server_sock);
}



bu kod efennim multicast ip ye join olup gelen datayı izlicek print edecek ...

esasında sağlam bir join olup o ip ve porttan gelen streami yayınlıcak bir media player yazmak lazım ama yemedi :)

herneyse bu işler windows ta cisco routing ile daha kolay yapılıyo , denendi görüldü :) onu da P3 te anlatıyım

Hiç yorum yok: