配色: 字号:
multcast_bind
2014-12-01 | 阅:  转:  |  分享 
  

#include
#include
#include
#inclu
de
#include
#include
#include


#defineMCAST_PORT8888
#defineMCAST_ADDR"224.0
.0.100"
#defineMCAST_INTERVAL5
#defineBUFF_SIZE256

intmain(
intargc,charargv[])
{
ints;

structsockaddr_inlocal_addr;
i
nterr=-1;

s=socket(AF_INET,SOCK_DGRAM,0);
if
(s==-1)
{
perror("socket()");

return-1;

}

memset(&local_addr,0,sizeof(local_addr));
loca
l_addr.sin_family=AF_INET;
local_addr.sin_addr.s_addr=ine
t_addr("224.0.0.100");
local_addr.sin_port=htons(MCAST_PORT
);

intnOptval=1;
if(setsockopt(s,SOL_SOCKET,SO_RE
USEADDR,(constvoid)&nOptval,sizeof(int))<0)
{

perror("reuseAddr:");

return-1;
}


err=bind(s,(structsockaddr)&local_addr,sizeof(local_addr))
;
if(err<0)
{
perror("bind()");

return
-2;
}


intloop=1;
err=setsockopt(s,IPPROTO_IP,
IP_MULTICAST_LOOP,&loop,sizeof(loop));
if(err<0)
{

perror("setsockopt():IP_MULTICAST_LOOP");
return-3
;

}



structip_mreqmreq;
memset(&mreq,0,siz
eof(structip_mreq));
//mreq.imr_multiaddr.s_addr=inet_add
r(MCAST_ADDR);

if(inet_aton(MCAST_ADDR,&mreq.imr_mult
iaddr)<0)
{
perror("inet_aton");

return-1;
}
mreq.imr_interface.s_addr=htonl(INAD
DR_ANY);


err=setsockopt(s,SOL_IP,IP_ADD_MEMBERSHIP,&
mreq,sizeof(mreq));
if(err<0)
{

perror("sets
ockopt():IP_ADD_MEMBERSHIP");

return-4;

}

int
times=0;
socklen_taddr_len=0;
charbuff[BUFF_SIZE];

intn=0;

while(1)
{
addr_len=sizeof(lo
cal_addr);
memset(buff,0,BUFF_SIZE);


n=recvfrom(s,buff,BUFF_SIZE,0,(structsockaddr)&loc
al_addr,&addr_len);
if(n==-1)
{
pe
rror("recvfrom()");
}

printf("process%dRecv%d
stmessagefromserver:%s\n",getpid(),times,buff);

sl
eep(MCAST_INTERVAL);

}

err=setsockopt(s,IPPROTO_IP,IP_DROP_MEMBERSHIP,&mreq,sizeof(mreq));
close(s);
return0;

}
献花(0)
+1
(本文系my360doc360...首藏)