if (server == INVALID_SOCKET) { AfxMessageBox (" "); return 0; } const int routenum = 32; int ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_TTL, (char*)&routenum,sizeof(routenum)); if( ret == SOCKET_ERROR ) { AfxMessageBox("Error in setsockopt"); return 0; } const int loopback = 0; ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_LOOP, (char*)&loopback,sizeof(loopback)); if( ret == SOCKET_ERROR ) { AfxMessageBox("Error in setsockopt(IP_MULTICAST_LOOP): "); return 0; } memset(&local, 0, sizeof(local)); local.sin_family = AF_INET; local.sin_port = htons(MULTICAST_PORT); local.sin_addr.S_un.S_addr = INADDR_ANY;
ret = bind(server, (sockaddr*)(&local), sizeof(local)); if( ret == SOCKET_ERROR ) { AfxMessageBox("Error in bind: "); return FALSE; } //下面应该就是 加入了 memset(&mreq, 0, sizeof(mreq)); mreq.imr_interface.S_un.S_addr = INADDR_ANY; mreq.imr_multiaddr.S_un.S_addr = inet_addr("224.0.0.99");
ret = setsockopt(server,IPPROTO_IP,IP_ADD_MEMBERSHIP, (char*)&mreq,sizeof(mreq)); if( ret == SOCKET_ERROR ) { AfxMessageBox("Error in setsockopt(IP_ADD_MEMBERSHIP): "); }
{
return 0;
}
server = socket(AF_INET, SOCK_DGRAM, 0);
if (server == INVALID_SOCKET)
{
AfxMessageBox (" ");
return 0;
} const int routenum = 32;
int ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_TTL,
(char*)&routenum,sizeof(routenum)); if( ret == SOCKET_ERROR )
{
AfxMessageBox("Error in setsockopt");
return 0;
}
const int loopback = 0;
ret = setsockopt(server,IPPROTO_IP,IP_MULTICAST_LOOP,
(char*)&loopback,sizeof(loopback));
if( ret == SOCKET_ERROR )
{
AfxMessageBox("Error in setsockopt(IP_MULTICAST_LOOP): ");
return 0;
}
memset(&local, 0, sizeof(local));
local.sin_family = AF_INET;
local.sin_port = htons(MULTICAST_PORT);
local.sin_addr.S_un.S_addr = INADDR_ANY;
ret = bind(server, (sockaddr*)(&local), sizeof(local));
if( ret == SOCKET_ERROR )
{
AfxMessageBox("Error in bind: ");
return FALSE;
}
//下面应该就是 加入了
memset(&mreq, 0, sizeof(mreq));
mreq.imr_interface.S_un.S_addr = INADDR_ANY;
mreq.imr_multiaddr.S_un.S_addr = inet_addr("224.0.0.99");
ret = setsockopt(server,IPPROTO_IP,IP_ADD_MEMBERSHIP,
(char*)&mreq,sizeof(mreq)); if( ret == SOCKET_ERROR )
{
AfxMessageBox("Error in setsockopt(IP_ADD_MEMBERSHIP): ");
}
mreq.imr_multiaddr.s_addr = inet_addr("234.5.6.7");
setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mreq,sizeof(mreq));
http://www.codeguru.com/Cpp/I-N/network/winsocksolutions/comments.php/c2457/?thread=32108
mreq.imr_interface.s_addr = inet_addr("127.0.0.1");
mreq.imr_multiaddr.s_addr = inet_addr("234.5.6.7");
setsockopt(s,IPPROTO_IP,IP_ADD_MEMBERSHIP,(char*)&mreq,sizeof(mreq));