Я работаю над клиентским / серверным вещательным приложением, используя 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);
}
Я хочу получить доступ к этому вектору, чтобы удалить указатель отключенного клиента.
Вы выполняете OnAccept
в контексте сокета прослушивания сервера, но вы выполняете OnClose
в контексте клиентского сокета. Итак, вы смотрите на два разных вектора.
Других решений пока нет …