我正在使用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);
}
我想访问该向量以删除断开连接的客户端的指针。
答案 0 :(得分:0)
您正在服务器侦听套接字的上下文中执行OnAccept
,但您正在客户端套接字的上下文中执行OnClose
。所以你要看两个不同的载体。