| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > CSocket, CSocketFile (MFC) |
| Автор: Просто Guest 23.3.2005, 07:21 | ||
| Hi All... Не могу побороть странную болезнь "сервера" - переодически он не отправляет "клиенту" пакет, хотя по коду это невозможно ... отловил 100% момент этого поведения и вот как это выглядит ... Привожу часть кода отправки сформированного пакета с сервера:
где 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 | ||
Я вообще-то немного так делал.. А можешь ли ты посмотреть-вормируется лм сообщение на клиенте о получении пакета? А какой тип соединения? Насколько я помню с помощью WinSock можно создавать два типа гнезда: TCP( содержат встроеные функции и обеспечивают гарантированую доставку сообщений) и UDP(требуют написания програмного кода для правильного приема -передачи пакетов). Для TCP в качестве второго аргумента Create() нужно передать SOCK_STREAM. Для UDP в качестве второго аргумента Create() нужно передать SOCK_DGRAM. |