我无法在CAsyncSocket :: OnClose()中使用vector

时间:2016-02-18 13:23:05

标签: c++ sockets vector mfc asyncsocket

我正在使用CSocket处理客户端/服务器广播应用程序。客户端连接到服务器OnAccept方法调用时。在OnAccept方法中,我正在创建该类的对象,并将该对象的指针存储在向量中。

void ServerSocket::OnAccept(int nErrorCode)
{
    ServerSocket * User = new ServerSocket;
    temp->m_hSocket = INVALID_SOCKET;   
    Accept(*temp);  
    m_vConnectionObject.push_back(temp);
    CSocket::OnAccept(nErrorCode);
}

当客户端关闭连接时,我的OnClose方法将被调用,但当我尝试访问该方法中的向量时,它会显示我的向量为空。

void ServerSocket::OnClose(int nErrorCode)
{       
    CString cname,name;
    UINT cport,port;

    GetPeerNameEx(cname,cport);

    int i=m_vConnectionObject.size();      //here i got "i= 0"

    std::vector<ServerSocket *>::iterator it = (m_vConnectionObject).begin() ;
    for ( ; it != m_vConnectionObject.end(); ++it)
    {   
        (*it)->GetPeerNameEx(name,port);
        if ((name==cname) && (port==cport))
        {
            //erase code
        }
    }

    CSocket::OnClose(nErrorCode);

}

我想访问该向量以删除断开连接的客户端的指针。

1 个答案:

答案 0 :(得分:0)

您正在服务器侦听套接字的上下文中执行OnAccept,但您正在客户端套接字的上下文中执行OnClose。所以你要看两个不同的载体。