0
我正在使用CSocket的客戶端/服務器廣播應用程序。客戶端連接到服務器OnAccept方法調用。在OnAccept方法中,我創建該類的對象並將該對象的指針存儲在向量中。我不能在CAsyncSocket :: OnClose()使用矢量
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);
}
我想訪問該向量來刪除斷開客戶端的指針。
你的迭代器循環是錯誤的。當'erase(it)'返回時,迭代器'it'不再有效,並且你不能預先遞增它。相反,使用'while(it!= m_vConnectionObject.end()){... if(...)it = m_vConnectionObject.erase(it);其他++它;'。 – IInspectable