Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CSocket, CSocketFile (MFC), с "сервера" не отпр. ответ клиенту 
:(
    Опции темы
Просто Guest
Дата 23.3.2005, 07:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Hi All...
Не могу побороть странную болезнь "сервера" - переодически он не отправляет "клиенту" пакет, хотя по коду это невозможно ... отловил 100% момент этого поведения и вот как это выглядит ...
Привожу часть кода отправки сформированного пакета с сервера:
Код

BOOL CClientThread::SendMsg()
{
         ....
         BYTE* pByte = NULL;
    try
    {
        DWORD dwSize = m_memFile.GetLength();
        if ((bSuccess = (dwSize > 0)) == TRUE) {
            pByte = m_memFile.Detach();
            m_pArchiveOut->Write(pByte, (UINT) dwSize);
            m_pArchiveOut->Flush(); // - вот здесь голова начинает болеть не по-детски
        }
    }
         ...
    if (pByte)
       free(pByte);
} 

где m_memFile - CMemFile сокетного соединеия куда сначала считываю переданный с клиента пакет, а после в него же формерую ответный пакет, а остальное:
BOOL CClientThread::InitInstance()
{
...
m_pClientSocket = new CClientSocket(this);
if (!m_pClientSocket->Attach(hConnected)) {
...
return FALSE;
}

m_pFile = new CSocketFile(m_pClientSocket);
m_pArchiveIn = new CArchive(m_pFile, CArchive::load);
m_pArchiveOut = new CArchive(m_pFile, CArchive::store);
...
}


Место где "ничего не происходит" - m_pArchiveOut->Flush(); - я прокомментировал ... По идее эта команда инициирует передачу данных на клиента но только не в смоделированной ситуации - она выполняется но клиент ничего не получет (в смысле на него ничего не приходит) ... поможите плиз ... просто не представляю куда смотреть и что копать ... подскажите!
  Вверх
Coocky
Дата 28.3.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: нет
Всего: 62



Цитата
она выполняется но клиент ничего не получет (в смысле на него ничего не приходит)

Я вообще-то немного так делал..
А можешь ли ты посмотреть-вормируется лм сообщение на клиенте о получении пакета?
А какой тип соединения?
Насколько я помню с помощью WinSock можно создавать два типа гнезда: TCP( содержат встроеные функции и обеспечивают гарантированую доставку сообщений) и UDP(требуют написания програмного кода для правильного приема -передачи пакетов).
Для TCP в качестве второго аргумента Create() нужно передать SOCK_STREAM.
Для UDP в качестве второго аргумента Create() нужно передать SOCK_DGRAM.

Это сообщение отредактировал(а) Coocky - 28.3.2005, 15:20


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0804 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.