有多个客户端连接一个服务端(有的客户端也可能是刚连进来的也可能是刚断开的),服务端每隔一分钟就向全部正在连接的客户端发一段数据。请问在MFC中用SOCKET类如何实现?请各位高手指教!谢谢了!

解决方案 »

  1.   

    多播,广播,UDP
    TCP,保存客户端Socket,一个一个发过去。
      

  2.   

    用一个链表吧,
    /* 
     * 增加客户端
     */
    void CClientManager::AddClient( CClientContext *pClient )
    {

    m_clientList.AddTail(pClient);
    }/* 
     * 删除客户端
     */
    void CClientManager::DeleteClient( CClientContext *pClient )
    {
    m_cs.Lock();
    POSITION pos1 = NULL;
    POSITION pos2 = NULL;
    for (pos1 = m_clientList.GetHeadPosition(); (pos2 = pos1) != NULL;)
    {
    CClientContext *pClientCText = (CClientContext*)m_clientList.GetNext(pos1);
    if (pClient == pClientCText)
    {
    m_clientList.RemoveAt(pos2);
    delete pClientCText;
    pClientCText = NULL;
    }
    }
    m_cs.Unlock();
    }/* 
     * 删除所有客户端
     */
    void CClientManager::DeleteAllClient( void )
    {
    m_cs.Lock();
    //删除客户端链表
    POSITION pos = NULL;
    for (pos = m_clientList.GetHeadPosition(); pos != NULL;)
    {
    CClientContext *pClient = (CClientContext*)m_clientList.GetNext(pos);
    delete pClient;
    pClient = NULL;
    }
    m_clientList.RemoveAll();
    m_cs.Unlock();
    }
      

  3.   

    CObList m_clientList; //管理客户端链表
      

  4.   

    网络通信有个概念性的通信,连接。
    这样解释一下,接受udp包后在一定时间间隔内可以原路返回发送数据。
    TCP连接就是连接,断开后发送数据时需要重新连接。给客户端发数据,需要客户端有线程在等待数据包的到来,或者有进程一直在侦听网络的连接。也就是说,从莫衷意义上来说,客户端要有服务的线程才行。udp只要客户端和服务器之间维持心跳,在会话列表的机器,服务器都可以通知到。
    TCP只有连接存在才可以发送数据。