组播能否在一台机器上,没有网络连接的情况下先模拟完成?
我的关键代码如下,可是组播成员收不到发送的数据,请各位高手指点一下:
void CMulticastDlg::JoinGroup()
{
        int iRet = 0; // return code // Create communication socket
m_hSocket = WSASocket(AF_INET, SOCK_DGRAM, 0, NULL, 0, 
WSA_FLAG_OVERLAPPED | WSA_FLAG_MULTIPOINT_C_LEAF | WSA_FLAG_MULTIPOINT_D_LEAF);
if (m_hSocket == INVALID_SOCKET)
{
    AfxMessageBox("Create communication socket fail!");
    return; 
} // Set socket option to reuse the port
BOOL bFlag = TRUE;

iRet = setsockopt(m_hSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&bFlag, sizeof(bFlag));

if (iRet == SOCKET_ERROR)
{
    AfxMessageBox("Set socket to reuse the port fail!");
    return; 
} // Bind the socket to a certain address
SOCKADDR_IN addrLocal;
addrLocal.sin_family = AF_INET;
addrLocal.sin_port = htons(m_uPort);
addrLocal.sin_addr.s_addr = INADDR_ANY; 

iRet = bind(m_hSocket, (SOCKADDR*)&addrLocal, sizeof(SOCKADDR)); if (iRet == SOCKET_ERROR)
{
    AfxMessageBox("Bind socket error!");
    closesocket(m_hSocket);
    return; 
} // Set multicasting TTL option
int TTL = 8;
iRet = setsockopt(m_hSocket, IPPROTO_IP, IP_MULTICAST_TTL, 
(const char*)&TTL, sizeof(int)); if (iRet == SOCKET_ERROR)
{
    AfxMessageBox("Set multicasting option error!");
    closesocket(m_hSocket);
    return; 
} // Join multicast group
m_addrRemote.sin_family = AF_INET; 
m_addrRemote.sin_port = htons(m_uPort);
m_addrRemote.sin_addr.s_addr = inet_addr(m_strAddress); // WSABUF wsaCalleeData; 

m_hGroupSocket = WSAJoinLeaf(m_hSocket, (SOCKADDR*)&m_addrRemote, sizeof(m_addrRemote), 
NULL, NULL, NULL, NULL, JL_BOTH);  if (m_hGroupSocket == INVALID_SOCKET)
{
    AfxMessageBox("Join multicast leaf error!");
    closesocket(m_hSocket);
    return; 
} // Set callback routine
iRet = WSAAsyncSelect(m_hGroupSocket, m_hWnd, WM_NETWORKEVENT, FD_WRITE | FD_READ); if (iRet == SOCKET_ERROR)
{
    AfxMessageBox("Select error!");
    closesocket(m_hSocket);
    return; 
} m_bConnect = TRUE;
}