powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сокеты в MFC
5 сообщений из 5, страница 1 из 1
Сокеты в MFC
    #34575023
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, вопрос в крупную: как использовать сокеты в клиент-серверой программе под MFC? Если можно, пример.
Класс CSocket - почему его нельзя использовать на сервере? Может на сервере нужно без классов, на чистом API ? Как тогда строится событийная модель?
И как вообще обмен строится? Я задал вопрос тут:
http://sql.ru/forum/actualthread.aspx?tid=435863
но теперь готов и на MFC делать
...
Рейтинг: 0 / 0
Сокеты в MFC
    #34576207
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TopSpaceПривет, вопрос в крупную: как использовать сокеты в клиент-серверой программе под MFC? Если можно, пример.
Класс CSocket - почему его нельзя использовать на сервере? Может на сервере нужно без классов, на чистом API ? Как тогда строится событийная модель?
И как вообще обмен строится? Я задал вопрос тут:
http://sql.ru/forum/actualthread.aspx?tid=435863
но теперь готов и на MFC делать

да пофигу как делать.
если MFC - то нуна лепить окно, для разборки очерди.
если на обычных сокетах - то либо поток, либо многособытийное ожидание...

вот в общем и вся лабуда...примеры в МСДН есть.. в инете найдёте так же дофига...

удачи Вам
(круглый)
...
Рейтинг: 0 / 0
Сокеты в MFC
    #34576607
NSFuimus1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Настойчиво советую выкинуть идею по поводу использования класса MFC CSocket, сцылки на всплывающие проблемы я давал вот хотябы здесь (ну или здесь ... используй CAsyncSocket (если уж будешь писать на MFC) - отлично работает и на "клиенте" и на "сервере" ... если ты хочешь чтоб сервер был похож на "правильный сервер" придется писать его используя пул потоков, очень хорошая статья по нему - здесь , пример по которому просекал эту фишку - здесь ... но снова замечу, что если ты все-таки собираешься использовать MFC (и CAsyncSocket в частности) пример этот - чисто чтобы понять механизм, ибо указанный класс позволяет все организовать не в пример проще, легче и красивее ...
успехов
...
Рейтинг: 0 / 0
Сокеты в MFC
    #34576622
TopSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ссылки, а как таблицу передавать? Склеить все в одну строку и передавать ее большими кусками, например по 4Kb ?
...
Рейтинг: 0 / 0
Сокеты в MFC
    #34576662
NSFuimus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
здесь давал рекомендации как передавать "вообще", используя MFC ... что касается передачи таблицы ... я так понимаю, что идет речь о передаче файла (?) ... ну в дополнение к коду, приведенному в сцылке можно добавить что-нить вроде следующего
Код: plaintext
\nCArchive ar(m_ClientSocket.m_memFile, CArchive::store);\n\t\t\t\tCFile file;\n\t\t\t\tDWORD dwBitsSize;\n\t\t\t\tfile.Open(файл, CFile::modeRead);\n\t\t\t\tdwBitsSize = (DWORD) file.GetLength();\n\t\t\t\tif (dwBitsSize ==  0 ) {\n...\n\t\t\t\t\tfile.Close();\n\t\t\t\t\treturn FALSE;\n\t\t\t\t}\n\t\t\t\tLPSTR pDIB;\n\t\t\t\tHDIB hDIB;\n\t\t\t\thDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize);\n\t\t\t\tif (hDIB ==  0 ) {\n...\n\t\t\t\t\tfile.Close();\n\t\t\t\t\treturn FALSE;\n\t\t\t\t}\n\t\t\t\tpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);\n\n\t\t\t\tUINT uiBitsReaded = file.Read(pDIB, dwBitsSize);\n\t\t\t\tif (dwBitsSize != ((DWORD) uiBitsReaded)) {\n...\n\t\t\t\t\tfile.Close();\n\t\t\t\t\treturn FALSE;\n\t\t\t\t}\n\t\t\t\tfile.Close();\n\t\t\t\tar << dwBitsSize;\n\t\t\t\tar.Write(pDIB, (UINT) dwBitsSize);\nar.Flush();\nar.Close();\n
на принимающей стороне - все вв обратнном порядке
Код: plaintext
\nCArchive ar(&m_memFile, CArchive::load);\n\t\t\t\t\tar >> dwSize;\n\t\t\t\t\tBYTE* pByte;\n\t\t\t\t\thDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwSize);\n\t\t\t\t\tpByte = (BYTE*) ::GlobalLock((HGLOBAL) hDIB);\n\t\t\t\t\tUINT uiBitsReaded = ar.Read(pByte,  (UINT) dwSize);\n\t\t\t\t\t\tCString strFile(имя файла);\n\t\t\t\t\t\tHANDLE hTempFile = INVALID_HANDLE_VALUE;\n\n\t\t\t\t\t\ttry\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\thTempFile = CreateFile((LPTSTR) (LPCTSTR) strFile,  // filename \n\t\t\t\t\t\t\t\t\t\tGENERIC_READ | GENERIC_WRITE, // open for read-write \n\t\t\t\t\t\t\t\t\t\t 0 ,                            // do not share \n\t\t\t\t\t\t\t\t\t\tNULL,                         // no security \n\t\t\t\t\t\t\t\t\t\tCREATE_ALWAYS,                // overwrite existing file\n\t\t\t\t\t\t\t\t\t\tFILE_ATTRIBUTE_NORMAL,        // normal file \n\t\t\t\t\t\t\t\t\t\tNULL);                        // no attr. template \n\n\t\t\t\t\t\t\tbSuccess = (hTempFile != INVALID_HANDLE_VALUE);\n\t\t\t\t\t\t\tif (bSuccess) {\n\t\t\t\t\t\t\t\tDWORD dwReadFileSize;\n\t\t\t\t\t\t\t\tbSuccess = WriteFile(hTempFile,                    // handle to file to write to\n\t\t\t\t\t\t\t\t\t\t\tpByte,                // pointer to data to write to file\n\t\t\t\t\t\t\t\t\t\t\tdwSize,     // number of bytes to write\n\t\t\t\t\t\t\t\t\t\t\t(LPDWORD) &dwReadFileSize,  // pointer to number of bytes written\n\t\t\t\t\t\t\t\t\t\t\tNULL);        // pointer to structure for overlapped I/O\n\n\t\t\t\t\t\t\t\tif (bSuccess) {\n\t\t\t\t\t\t\t\t\tTRY\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t#if _MSC_VER >=  1300 \n\t\t\t\t\t\t\t\t\t\tCFile cFile((HANDLE) hTempFile);\n\t\t\t\t\t\t\t\t\t#else\n\t\t\t\t\t\t\t\t\t\tCFile cFile((int) hTempFile);\n\t\t\t\t\t\t\t\t\t#endif\n\t\t\t\t\t\t\t\t\t\tCFileStatus status;\n\t\t\t\t\t\t\t\t\t\tcFile.GetStatus(status);\n\t\t\t\t\t\t\t\t\t\tCTime tLastModify(dtValue.GetYear(), dtValue.GetMonth(), dtValue.GetDay(), dtValue.GetHour(), dtValue.GetMinute(), dtValue.GetSecond());\n\t\t\t\t\t\t\t\t\t\tstatus.m_mtime = tLastModify;\n\t\t\t\t\t\t\t\t\t\tstatus.m_ctime = tLastModify;\n\t\t\t\t\t\t\t\t\t\tcFile.Close();\n\t\t\t\t\t\t\t\t\t\tcFile.SetStatus(strFile, status);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tCATCH_ALL(e)\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tCloseHandle(hTempFile);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tEND_CATCH_ALL\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (hTempFile != INVALID_HANDLE_VALUE)\n\t\t\t\t\t\t\t\t\tCloseHandle(hTempFile);\n\n\t\t\t\t\t\t\t\tstrValue = strFile;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!bSuccess) \n\t\t\t\t\t\t\t\tAddError("Невозможно открыть результирующий файл (GetParam): " + strFile);\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch(CFileException* e)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbSuccess = FALSE;\n...\n\t\t\t\t\t\t\te->Delete();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (...)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tbSuccess = FALSE;\n...\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n
ЗЫ надергал код из классов - так что он врядли рабочий сам по себе ... - не обессудь
ЗЫЫ что касается собственно передачи: в MSDN есть отличный пример именно для класса CAsyncSocket - давай уже сам как-нибудь :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сокеты в MFC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]