18,363
社区成员




SOCKET s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
BOOL bReuse=TRUE;
setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(const char*)&bReuse,sizeof(bReuse));
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(4567);
addr.sin_addr.s_addr=INADDR_ANY;
if(SOCKET_ERROR==bind(s,(const sockaddr*)&addr,sizeof(addr)))
{
printf("绑定套接字失败\r\n");
getchar();
return -1;
}
ip_mreq_source im1;
im1.imr_interface.S_un.S_addr=INADDR_ANY;
im1.imr_multiaddr.S_un.S_addr=inet_addr("234.5.6.7");
im1.imr_sourceaddr.S_un.S_addr=inet_addr("172.30.52.211");
setsockopt(s,IPPROTO_IP,IP_ADD_SOURCE_MEMBERSHIP,(const char*)&im1,sizeof(im1));
//setsockopt(s,IPPROTO_IP,IP_DROP_MEMBERSHIP,(const char*)&im,sizeof(im));
/*BOOL bLoop=FALSE;
setsockopt(s,IPPROTO_IP,IP_MULTICAST_LOOP,(const char*)&bLoop,sizeof(bLoop));*/
while(true)
{
int iRet;
char szBuf[1024];
sockaddr_in addrRemote;
int iSize=sizeof(addrRemote);
iRet=recvfrom(s,szBuf,1024,0,(sockaddr*)&addrRemote,&iSize);
if(SOCKET_ERROR!=iRet)
{
szBuf[iRet]='\0';
printf("接受到多播数据:%s\r\n",szBuf);
printf("发送方地址:%s 端口:%d\r\n",inet_ntoa(addrRemote.sin_addr),ntohs(addrRemote.sin_port));
}
}