| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > Помогите девушке :girl_crazy |
| Автор: KVA 18.11.2009, 17:53 |
На компьютере есть шаблоны, которые заполняются из БД при заданных критериях. Нужно, чтобы клиенты через инет(в том числе и КПК) могли выбрать себе шаблон, ввести критерии и получить готовый документ. Шаблоны реализованы, больше нет ничего. Язык Visual С++, нестандартные библиотеки использовать нельзя. Я с сетями раньше не работала, поэтому представления об этом на уровне учебы. Не знаю даже с чего начать Добавлено @ 17:59 Надеюся мне не придется самой себе отвечать.... |
| Автор: niXman 18.11.2009, 19:08 |
| Чем владеешь? Какой уровень знаний? |
| Автор: KVA 19.11.2009, 05:18 |
| В принципе смогу разобраться во всем, главное указать план действий, что рыскать в инете и что за чем делать. На уровне прикладных программ всё ОК, а вот с сетями не сталкивалась. Спасибо за надежду на помощь |
| Автор: KVA 19.11.2009, 06:28 |
| И ещё, нужна платформонезависимость, т.е. ISAPI-скрипт не подходит? |
| Автор: Олег2005 19.11.2009, 12:26 |
ISAPI - только на стороне майкрософтовского сервера. Кроссплатформенность не получится.... По сетям.....поищите Криса Касперского - самоучитель игры на Winsock |
| Автор: KVA 19.11.2009, 20:36 |
| Итак, я же работаю Можно каркас кода набацать, а то боюсь, первая работа Сервер- это программа. Где она должна лежать в реальном режиме исполнения? А то в гуге он то appache, то локально на компе, то ещё где-то Касперского я скачала, почитаю завтра |
| Автор: Олег2005 19.11.2009, 22:42 |
Итак, клиент где-то там.....в Африке Какой запрос он отправляет? Т.е. формат запроса. Далее - насчет CGI Почитайте в файлике. Думаю, что вы вполне можете обойтись и без CGI Принимаете запрос на своем TCP-сервере - который на вашей машине будет!!! Расшифровываете. Средствами С++ залазите в свою файловую систему и ищете нужный файл. Запихиваете его в буфер передачи функции send и отсылаете клиенту. Все...... |
| Автор: andrew_121 19.11.2009, 23:17 | ||
Ух как у тебя все просто |
| Автор: Олег2005 20.11.2009, 15:36 |
Да вроде проще некуда....... |
| Автор: MAKCim 20.11.2009, 18:47 |
| стоит наверное уточнить, что раз нужно юзать cgi, то протокол, видимо, http[s] |
| Автор: KVA 21.11.2009, 08:13 | ||||||||
| Прочитала всё, что дал Олег2005. Олег2005,у меня есть лично к вам вопросы, ну если другие ответят 1. <winsock2.h> автоматом подключает <windows.h>, значит ли это,что <winsock2.h> только под Винду и платформонезависимости не будет? 2. По отдельности поняла и сокеты, и CGI, а вот вместе как использовать 3.
Неа 4. из Присоединённый файл CGIinterfaceRu.doc 97,00 Kb
и чуть позже
Так сервер это cgi-модуль, или его всё-таки надо реализовывать, или это стандартный HTTP? Взаимодействие клиент-сервер в сокетах очевидно. А вот cgi 5. из Присоединённый файл CGIinterfaceRu.doc 97,00 Kb
Это и есть основной cgi-модуль, но вот в примере нет ни одного упоминания post-query(), а есть main(). Я понимаю, что я чё-то не догнала, а вот чё не пойму. 6. Я своё ТЗ представляю так. Пользователь в Африке зашел в интернет кафе. Вышел на сайт x.ru Авторизовался и нажал на кнопочку выбрать. Выбрал Док1 и нажал на кнопочку Формировать. Получил запрос на критерии для Док1 Заполнил критерии и нажал Далее Получил Документ pdf А вот как начальник не знаю, он спросил как я технически это представляю |
| Автор: Олег2005 21.11.2009, 10:49 | ||
| [QUOTE=KVA,21.11.2009, 07:13]Прочитала всё, что дал Олег2005. Олег2005,у меня есть лично к вам вопросы, ну если другие ответят 1. <winsock2.h> автоматом подключает <windows.h>, значит ли это,что <winsock2.h> только под Винду и платформонезависимости не будет? Да, будет только под win-платформу 2. По отдельности поняла и сокеты, и CGI, а вот вместе как использовать Принципиально web-сервер - лентяй, и не умеет ничего, кроме как принять HTTP-запрос, расшифровать его и согласно расшифровке передать из своего каталога все затребованные файлы (html-страничку - и затем все картинки), после чего соединение может быть разорвано. Но если надо выдать документ, которого не существует в файловой системе - и который надо сформировать динамически нка лету - это и есть типичная задача CGI-модуля. Это может делать в принципе и сам веб-сервер - но тогда он будет занят обработкой - что не есть хорошо. Для таких случаев CGI и предназначен. В вашем случае нет никакой необходимости в создании веб-сервера - абсолютно никакой, потому что протокол общения у вас - не HTTP - а ваш собственный 3.
Неа Вот то, что вы написали - и есть протокол общения, и никаким вебом здесь не пахнет. Почему? Как я написал, все гораздо проще. У вас будет никак не веб-сервер - а ваш собственный сервер. Его задача: принять коннект (запрос от клиента) - и скажем ответить, что все ок, готов дальше работать. Второй прием информации - это прием критериев формирования. Приняли критерии от клиента, и начали работу по формированию документа - связываетесь с БД, все делаете как надо - и передаете клиенту. и разрываете соединение по данному сокету. Всю обработку по клиенту выделяете в отдельный поток - после accept() делаете CreateThread(), и в этом потоке выполняете всю описанную выше работу. Поток потом убиваете. 4. Так сервер это cgi-модуль, или его всё-таки надо реализовывать, или это стандартный HTTP? Взаимодействие клиент-сервер в сокетах очевидно. А вот cgi Состав веб-сервера 1. TCP-сервер 2. HTTP-сервер - парсер для запросов HTTP-запросов (GET, POST) от клиента, формирование HTTP-ответов и всяко разно - вам это НЕ НАДО!!! 3. СGI-модули - для РАСШИРЕНИЯ функциональных возможностей веб-сервера. Но все это - ДЛЯ ВЕБА!!!! У вас веба нет как класса! |
| Автор: MAKCim 21.11.2009, 11:31 | ||||
| Олег2005, везде, где можно следует применять http унификация вещь серьезная если понадобится вдруг шифрование, то https как раз будет кстати, стоит ли говорить о том, что существует куча либ, которые уже за нас делают лювиную долю работы, к примеру CURL+SSL ;) Добавлено через 1 минуту и 7 секунд
самый ущербный и непроизводительный способ хотя бы уж тогда pre-fork использовать... Добавлено через 10 минут и 25 секунд вот простейший CGI-модуль на C
|
| Автор: KVA 21.11.2009, 13:21 | ||
Олег2005, большое спасибо, наконец-то я поняла про сервера
А как же платформонезависимость? Какая нужна библиотека по сокетам? MAKCim, вы, как я поняла, за cgi? |
| Автор: MAKCim 21.11.2009, 13:30 |
я за http ;) а уж кто конкретно будет заниматься обработкой не суть важно |
| Автор: Олег2005 21.11.2009, 21:30 |
Для того, чтобы обеспечить минимальную платформонезависимость, надо при программировании на Виндовс использовать только сокетные функции в стиле Беркли - т.е. те, которые Виндовс поддерживает с самого начала его истории и никаких WSA....... Кроме того, придется при переходе на иную платформу перекомпилировать исходник, есть приемы программирования - я только их точно не знаю....... |
| Автор: jonie 21.11.2009, 21:44 |
| стоп. Давайте все сначала определяться ЧТО надо и КАКИЕ условия, а потом будем http-сить...а для этого надо ответить на вопросы: 1) можно ли использовать бибилотеки вроде libcgi или gSOAP, почему нельзя (или другие, подходящие под лицензии, например BSD, MIT) ?; 2) на каких платформах всё это должно работать; 3) как вы собираетесь делать pdf ?; 4) будет ли у вас сервер, который позволит вашу программу запустить вообще (хост сервер, вроде апача или IIS) или его надо будет реализовать также? |
| Автор: Олег2005 22.11.2009, 23:39 | ||||
В данном случае не вижу необходимости в HTTP - во всяком случае из постановки задачи
pre-fork в виндовс мне неизвестен - пока. Если возможно, проясните, может быть отстал...... Насчет ущербности.. Пул потоков для нескольких клиентов - это простейший вариант - и он работает без проблем. А вот что пишут: http://www.itsfor.narod.ru/net_hard/2/117_1.htm Fork-идеология предусматривает запуск полной копии HTTPD-процесса для каждого нового запроса (что очень просто реализуется в Unix). Такой подход хорош всем, кроме производительности: порождение нового процесса - весьма ресурсоемкая и медленная задача. В ходе эволюции HTTPD сформировалась некая «мутация» fork-идеологии, называемая pre-fork: HTTPD создает множество порожденных процессов, и поступающий запрос обрабатывается одной из незанятых в данный момент копий. Именно на pre-fork-идеологии основан самый популярный HTTP-сервер Apache. К достоинствам pre-fork-вмутации» следует отнести высокую производительность (в 2-10 раз большую, чем для чистой fork-модели), к недостаткам — столь же высокую сложность реализации (особенно в части синхронизации как процессов-копий HTTPD, так и операций ввода/вывода). Более современная thread-идеология отлично подходит для воплощения на таких платформах, как Windows NT или (даже в большей мере) BeOS. Создание thread (нити, или «тонкого» процесса) — значительно менее ресурсоемкая по сравнению с fork задача, соответственно, HTTPD, основанные на thread-идеологии, ощутимо быстрее своих fork- и pre-fork-собратьев. Единственное «но» — отсутствие стандартов на thread-модель с вытекающей отсюда низкой мобильностью реализации. Хотя отчаиваться не стоит — существуют замечательные thread HTTP, прекрасно работающие на всех Unix и в Windows NT. |
| Автор: KVA 23.11.2009, 08:27 | ||||||||
"Необходимо использовать язык ANSI C++, при этом использовать только внешние стандартные функции, входящие в состав любой 32-х разр ОС Linux"
QNX, Linux,Windows
Его создает другой объект по входным параметрам и задача решена.
Я разбиралась, разбиралась с серверами и решила, что все-таки это будет cgi-приложение, сервер apache. На самом деле задача-то большая, а я выполняю лишь пункт. Поэтому не ругайте меня, что то так, то эдак. |
| Автор: jonie 23.11.2009, 10:46 | ||
KVA,
ну если у вас будет апач и вы склонны к cgi, то мой вам совет - взять какую-нибудь либу вроде libcgi и слинковать ее статически. И волки сыти и овцы целы.... |
| Автор: KVA 23.11.2009, 11:10 | ||
Не поняла |
| Автор: DrHex 23.11.2009, 11:45 |
| У вас очень простая задачка, ответе содержится в вопросе, вы еще не поняли??? Вам нужно написать cgi - скрипт на С++. Соответственно стандарта по С++ вам вполне хватит, а это и есть кросс-платформленность(при чем самая лучшая и простая). Спросить можно google про CGI и он может ответить следующими ссылками http://itsoft.ru/itcgi/cgi.html http://www.yolinux.com/TUTORIALS/LinuxTutorialC++CGI.html http://rudeserver.com/cgiparser/tut_vc/ П.С При станрте исполняемого файла(за его запуск отвечает http сервер Apache наверное самый простой и распространенный) он переадрисовывает pipe(проще говоря printf печатает для ответа на клиентскую сторону...) соответственно отстаються только работа с файлами(FILE* fopen - это Сятина, а фот o(i)fstream - это будет плюсятина)!!!! |
| Автор: MAKCim 23.11.2009, 12:41 | ||||
а я не вижу смысла писАть свой протокол, не унифицированный, непереносимый, плохо расширяемый ;)
тот же ajax скажем может генерировать достаточно много запросов, и сколько бы ни стОило создание треда, один поток на каждый accept - это плохо разве что если быстро нужно что-то рабочее и приводить апач в качестве примера не стОит, т. к это не самый лучший пример ;) кроме того без nginx его мало кто применяет lighttpd это совсем другое дело... |
| Автор: Олег2005 23.11.2009, 18:08 | ||
| MAKCim, может перестанем препираться? Должен отдать вам должное - вы оказались телепатом - насчет существования у автора Апачей, однако из оригинального поста:
это не очевидно - почему я и предположил - что и клиент и сервер - самописные. А быстро соорудить как все это - я и написал. Если же есть Апач - то безусловно цги.......а еще лучше - FAST CGI - модуль на апаче есть..... |
| Автор: KVA 24.11.2009, 10:55 | ||||
Я почитала в гуге про FAST CGI, начала пробовать
компилятор жалуется
Расскажите что делать, где подключать и т.д. И как организовать, чтобы WEB-интерфейс на JScript послал на apache-сервер пакет на выполнение FAST CGI-модуля с заданными параметрами. |
| Автор: jonie 24.11.2009, 18:57 | ||
| http://www.fastcgi.com/drupal/node/5 качайте библиотеку с хедерами и прочим барахлом.
|
| Автор: KVA 25.11.2009, 05:32 | ||
Скачала, куда теперь закинуть и что-где прописать? |
| Автор: jonie 25.11.2009, 08:15 |
| KVA, известно куда... в никсах все стаднартно (подскажут что да как знающие), в винде - прописать пути до Include Directories в настройках компиляции, а также пути до Library Directories .... понятия не имею какой у вас там IDE, но в VS это тут: http://ipicture.ru/Gallery/Viewfull/27513651.html и тут: http://ipicture.ru/Gallery/Viewfull/27513659.html |
| Автор: KVA 25.11.2009, 09:15 |
| Всё, всем спасибо. Пошла писать |