本帖最后由 VisualEleven 于 2010-12-07 17:35:37 编辑

解决方案 »

  1.   

    以前版本的EVC只支持 socket1.1,新版的没了解
    函数recvfrom会立即返回.
      

  2.   

    http://topic.csdn.net/u/20101208/08/921658cf-f7f3-45d9-9478-726fe93cb15f.htmlBOOL Udp::SetMulticast(PCSTR textIP)
    {
        int error = 0;
        int i_val = 0;    // 设置多播和广播
        if ( IN_MULTICAST(ntohl(inet_addr(textIP))) )
        {
            i_val = 1;
            error =  setsockopt(m_Socket, IPPROTO_IP, IP_MULTICAST_LOOP, (char*)&i_val, sizeof(i_val) );
            if (error == SOCKET_ERROR)
            {
                ReportError();
                return FALSE;
            }
            
            ip_mreq multicastAddr;
            multicastAddr.imr_multiaddr.s_addr = inet_addr(textIP);
            multicastAddr.imr_interface.s_addr = htonl(INADDR_ANY);
            
            error = setsockopt(m_Socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&multicastAddr, sizeof(multicastAddr));
            if (error == SOCKET_ERROR)
            {
                ReportError();
                return FALSE;
            }
        }
        
        //设置广播
        if ( inet_addr(textIP) == INADDR_BROADCAST )
        {
            i_val = 1;
            error = setsockopt( m_Socket, SOL_SOCKET, SO_BROADCAST, (char*)&i_val, sizeof(i_val) );
            if (error == SOCKET_ERROR)
            {
                ReportError();
                return FALSE;
            }
        }
        return TRUE;
    }