创建了一个socket线程类,用来监视客户端的连接,但有客户端连入后,这个线程负责该客户端的数据传输工作,同时创建一个新的socket线程监视其他客户端的连接情况。现在不知道怎么才能把创建的各个线程和不同的客户端连接对应起来?也就是说怎么来标识各个线程?这样当其中的一个连接断开的时候我就可以把与它对应的线程给删掉了

解决方案 »

  1.   

    侦听用固定的端口,当有一个客户端接入后,开一个新的线程来处理接收到的socket
      

  2.   

    class CYourThread:public CWinThread
    {
    friend class ???
    protected:
    UINT m_nClientType;
    UINT m_nClientIP;
    UINT m_nClientPort;
    };CList<CYourThread*,CYourThread*> m_listThreads;
    When connected:
    CWinThread* pThread=AfxBegin(CYourThread,...,CREATE_SUSPEND);
    pThread->m_ClientType=...;
    pThread->m_ClientIP=...;
    pThread->m_nClientPort=...;
    pThread->m_bAutoDelete=false;
    m_listThreads.AddTail(pThread);
    pThread->Resume();when disconnect:POSITON pos=m_listThreads.GetHeadPosition();
    while(pos!=NULL)
    {
    CYourThread* pThread=m_listThreads.GetNext(pos);
    if(pThread->m_nClientType==...&& pThread->m_nClientIP==...&&pThread->m_nClientPort=...)
    {
    pThread->PostThreadMessage(WM_QUIT,0,0);
    WaitForSingleObject(pThread->m_hThread,INFINITE);
    delete pThread;
    break;
    }
    }