Проблема с сокетами в MFC
В некоторое случайное время сервер перестает получать сообщения от клиента (обычно от одного какого-нибудь клиента, но бывает и от нескольких)
Делаю вроде бы все правильно, правда через CSocket, но вот интересно, клиент-то получает сообщения от сервера.
Кусок кода приема сообщения от клиента сервером:
Код:
void CSwopSocket::Init()
{
m_pFile = new CSocketFile(this);
m_pArchiveIn = new CArchive(m_pFile,CArchive::load);
m_pArchiveOut = new CArchive(m_pFile,CArchive::store);
}
void CSwopSocket::OnReceive(int nErrorCode)
{
CSocket::OnReceive(nErrorCode);
m_pTree->ProcessPendingRead(this);
}
void CITSTreeView::ProcessPendingRead(CSwopSocket *pSocket)
{
CString ClientIP;
UINT ClientPort;
// Получить IP-адрес клиента
pSocket->GetPeerName(ClientIP,ClientPort);
// Переслать сообщение
CMsg msg;
ReceiveMsg(pSocket,&msg);
...
...
}
void CITSTreeView::ReceiveMsg(CSwopSocket *pSocket, CMsg *msg)
{
TRY {
msg->Serialize(*(pSocket->m_pArchiveIn));
} CATCH (CFileException, e) {
msg->m_msgID = CS_CLIENT_OFFLINE;
} END_CATCH
}
void CMsg::Serialize(CArchive& ar)
{
if (ar.IsStoring()) {
ar << m_msgID;
ar << m_msgText;
} else {
ar >> m_msgID;
ar >> m_msgText;
ar >> m_strTime;
}
}
{
m_pFile = new CSocketFile(this);
m_pArchiveIn = new CArchive(m_pFile,CArchive::load);
m_pArchiveOut = new CArchive(m_pFile,CArchive::store);
}
void CSwopSocket::OnReceive(int nErrorCode)
{
CSocket::OnReceive(nErrorCode);
m_pTree->ProcessPendingRead(this);
}
void CITSTreeView::ProcessPendingRead(CSwopSocket *pSocket)
{
CString ClientIP;
UINT ClientPort;
// Получить IP-адрес клиента
pSocket->GetPeerName(ClientIP,ClientPort);
// Переслать сообщение
CMsg msg;
ReceiveMsg(pSocket,&msg);
...
...
}
void CITSTreeView::ReceiveMsg(CSwopSocket *pSocket, CMsg *msg)
{
TRY {
msg->Serialize(*(pSocket->m_pArchiveIn));
} CATCH (CFileException, e) {
msg->m_msgID = CS_CLIENT_OFFLINE;
} END_CATCH
}
void CMsg::Serialize(CArchive& ar)
{
if (ar.IsStoring()) {
ar << m_msgID;
ar << m_msgText;
} else {
ar >> m_msgID;
ar >> m_msgText;
ar >> m_strTime;
}
}
Что здесь делается неправильно?