Проблемы с классом CSocket
Пишу небольшое сетевое приложение на Visual C++ с использованием MFC. Есть один сервер, к которому цепляются несколько клиентов и передают на сервер информацию. В программе для передачи информации использую 3 класса в известной связке CSocket, CSocketFile, CArchive. Клиенты открывают соединение с помощью функции Connect в начале своей работы и все время держат его. Т.е. соединение разрывается лишь когда клиент завершает работу.
Для передачи информации на клиенте используется приблизительно такой код:
m_pOutArchive->Write(lpBuf,nCount);
m_pOutArchive->Flush();
На сервере для получения информации используется такой код:
CMyClientSocket::OnReceive(int nErrorCode)
{
CSocket::OnReceive(nErrorCode);
do
{
...................
nRead= m_pInArchive->Read(lpBuf,nCount);
...................
} while(!m_pInArchive->IsBufferEmpty());
}
Для каждого соединения на сервере создается свой объект класса CMyClientSocket, унаследованного от CSocket, и свои объекты классов CArchive и CSocketFile.
Сообщения с клиентов отправляются довольно часто - где-то раз в минуту.
Вроде все правильно, но есть проблема. Через небольшое время работы на сервер перестают приходить сообщения от некоторых клиентов. Т.е. с клиента они нормально уходят, а на сервере функция OnReceive даже не вызывается. Связь здесь ни при чем, потому что то же самое происходит и когда клиент и сервер находятся на одном компе и клиент цепляется на 127.0.0.1. Файрволы тоже все отключены. При этом серверная программа нормально откликается и нормально принимает информацию от других клиентов. После закрытия клиента (и соответственно разрыва соединения) и нового подсоединения сообщения от этого клиента опять начинают приходить. Может, кто сталкивался с подобным. В чем я ошибся и как с этим бороться?
Извиняюсь за очень длинный вопрос.
Заранее благодарен.
Посылай тестовые пакеты каждые, ну скажем, 5-10 минут.
посмотри реализацию CAsyncSocket там таймаут на 2000 мс