Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с классом CSocket

288
08 марта 2008 года
nikitozz
1.2K / / 09.03.2007
Здравствуйте, уважаемые посетители. Такой вопрос.
Пишу небольшое сетевое приложение на 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. Файрволы тоже все отключены. При этом серверная программа нормально откликается и нормально принимает информацию от других клиентов. После закрытия клиента (и соответственно разрыва соединения) и нового подсоединения сообщения от этого клиента опять начинают приходить. Может, кто сталкивался с подобным. В чем я ошибся и как с этим бороться?

Извиняюсь за очень длинный вопрос.
Заранее благодарен.
398
11 марта 2008 года
Alexandoros
630 / / 21.10.2005
KeepAlive.
Посылай тестовые пакеты каждые, ну скажем, 5-10 минут.
38K
04 апреля 2008 года
develsan
1 / / 04.04.2008
посмотри реализацию CAsyncSocket там таймаут на 2000 мс
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог