Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Помогите девушке :girl_crazy


Автор: KVA 18.11.2009, 17:53

На компьютере есть шаблоны, которые заполняются из БД при заданных критериях. Нужно, чтобы клиенты через инет(в том числе и КПК) могли выбрать себе шаблон, ввести критерии  и получить готовый документ. Шаблоны реализованы, больше нет ничего. Язык Visual С++, нестандартные библиотеки использовать нельзя. Я с сетями раньше не работала, поэтому представления об этом на уровне учебы. Не знаю даже с чего начать  smile .  Плиз, программеры, помогите, разжуйте девушке  smile

Добавлено @ 17:59
Надеюся мне не придется самой себе отвечать.... smile 

Автор: niXman 18.11.2009, 19:08
Чем владеешь? Какой уровень знаний?

Автор: KVA 19.11.2009, 05:18
В принципе смогу разобраться во всем, главное указать план действий, что рыскать в инете и что за чем делать. На уровне прикладных программ всё ОК, а вот с сетями не сталкивалась. Спасибо за надежду на помощь smile 

Автор: KVA 19.11.2009, 06:28
И ещё, нужна платформонезависимость, т.е. ISAPI-скрипт  не подходит? 

Автор: Олег2005 19.11.2009, 12:26
Цитата(KVA @  19.11.2009,  05:28 Найти цитируемый пост)
ISAPI-скрипт  не подходит?  

ISAPI - только на стороне майкрософтовского сервера.
Кроссплатформенность не получится....
По сетям.....поищите Криса Касперского - самоучитель игры на Winsock

Автор: KVA 19.11.2009, 20:36
Итак, я же работаю smile . Задача облегчается. Надо принять данные с клиента и отправить ему PDF файл. Надо использовать CGI, Visual C++. 

Можно каркас кода набацать, а то боюсь, первая работа  smile 
 
Сервер- это программа. Где она должна лежать в реальном режиме исполнения? А то в гуге он то appache, то локально на компе, то ещё где-то smile 

Касперского я скачала, почитаю завтра smile 

Автор: andrew_121 19.11.2009, 21:28
Цитата(KVA @  19.11.2009,  20:36 Найти цитируемый пост)
Надо использовать CGI, Visual C++

А сторонние библиотеки использовать нельзя? Что, на сокетах писать будешь? И задачу как-то более детально сформулируй.

Цитата(KVA @  19.11.2009,  20:36 Найти цитируемый пост)
Сервер- это программа. Где она должна лежать в реальном режиме исполнения?

Сервером, может быть и клиентская программа. Тут дело в том, что "сервер" должен выполнять. Может оказаться так, что сервер и клиент это одно и тоже, с разницей в том, кто инициирует сеанс.

В общем, объясняй.

Автор: Олег2005 19.11.2009, 22:42
Цитата(KVA @  19.11.2009,  19:36 Найти цитируемый пост)
Надо принять данные с клиента и отправить ему PDF файл. Надо 

Итак, клиент где-то там.....в Африке smile 
Какой запрос он отправляет? Т.е. формат запроса.
Далее - насчет CGI
Почитайте в файлике.
Думаю, что вы вполне можете обойтись и без CGI
Принимаете запрос на своем TCP-сервере - который на вашей машине будет!!!
Расшифровываете.
Средствами С++ залазите в свою файловую систему и ищете нужный файл.
Запихиваете его в буфер передачи функции send и отсылаете клиенту.
Все......

Автор: andrew_121 19.11.2009, 23:17
Цитата(Олег2005 @  19.11.2009,  22:42 Найти цитируемый пост)
Принимаете запрос на своем TCP-сервере - который на вашей машине будет!!!
Расшифровываете.
Средствами С++ залазите в свою файловую систему и ищете нужный файл.
Запихиваете его в буфер передачи функции send и отсылаете клиенту.
Все...... 

Ух как у тебя все просто smile 

Автор: Олег2005 20.11.2009, 15:36
Цитата(andrew_121 @  19.11.2009,  22:17 Найти цитируемый пост)
Ух как у тебя все просто smile  

Да вроде проще некуда.......

Автор: MAKCim 20.11.2009, 18:47
стоит наверное уточнить, что раз нужно юзать cgi, то протокол, видимо, http[s]

Автор: KVA 21.11.2009, 08:13
Прочитала всё, что дал Олег2005.  Олег2005,у меня есть лично к вам вопросы, ну если другие ответят  smile .
1. <winsock2.h> автоматом подключает <windows.h>, значит ли это,что <winsock2.h> только под Винду и платформонезависимости не будет?
2. По отдельности поняла и сокеты, и CGI, а вот вместе как использовать smile 
3. 
Цитата
Думаю, что вы вполне можете обойтись и без CGI

Неа smile ! При первом запросе мы запрашиваем Вид документа, а при втором в зависимости от выбора запрашиваем критерии его формирования. Для разных документов разные критерии и список видов обновляется и берется из БД, данные для документа тоже из БД.

4. из Присоединённый файл  CGIinterfaceRu.doc 97,00 Kb 
Цитата

Клиентская часть
Для создания клиентской части необходимо создать HTML-документ, в котором реализован интерфейс с пользователем. В языке HTML это возможно посредством форм. 
Серверная часть
Серверная часть состоит из исполняемого модуля, решающего основные задачи обработки данных поступающих от клиентской части, формирования ответа в формате HTML, и т.д. Такой модуль называется cgi-модулем. 

и чуть позже
Цитата

СGI - модуль выводит информацию в стандартный выходной поток. Этот вывод может представлять собой или документ, сгенерированный cgi-модулем, или инструкцию серверу, где получить необходимый документ.

Так сервер это cgi-модуль, или его всё-таки надо реализовывать, или это стандартный HTTP? Взаимодействие клиент-сервер в сокетах очевидно. А вот cgi smile 

5. из Присоединённый файл  CGIinterfaceRu.doc 97,00 Kb 
Цитата

Ниже приведен исходный текст программы post-query. 
.....

Это и есть основной cgi-модуль, но вот в примере нет ни одного упоминания post-query(), а есть main(). Я понимаю, что я чё-то не догнала, а вот чё не пойму.

6. Я своё ТЗ представляю так. 
Пользователь в Африке зашел в интернет кафе.
Вышел на сайт x.ru
Авторизовался и нажал на кнопочку выбрать.
Выбрал Док1 и нажал на кнопочку Формировать.
Получил запрос на критерии для Док1 
Заполнил критерии и нажал Далее
Получил Документ pdf
А вот как начальник не знаю, он спросил как я технически это представляю smile 

Автор: Олег2005 21.11.2009, 10:49
[QUOTE=KVA,21.11.2009,  07:13]Прочитала всё, что дал Олег2005.  Олег2005,у меня есть лично к вам вопросы, ну если другие ответят  smile .
1. <winsock2.h> автоматом подключает <windows.h>, значит ли это,что <winsock2.h> только под Винду и платформонезависимости не будет?

Да, будет только под win-платформу

2. По отдельности поняла и сокеты, и CGI, а вот вместе как использовать

Принципиально web-сервер - лентяй, и не умеет ничего, кроме как принять HTTP-запрос, расшифровать его и согласно расшифровке передать из своего каталога все затребованные файлы (html-страничку - и затем все картинки), после чего соединение может быть разорвано. Но если надо выдать документ, которого не существует в файловой системе - и который надо сформировать динамически нка лету - это и есть типичная задача CGI-модуля. Это может делать в принципе и сам веб-сервер - но тогда он будет занят обработкой - что не есть хорошо. Для таких случаев CGI и предназначен.
В вашем случае нет никакой необходимости в создании веб-сервера - абсолютно никакой, потому что протокол общения у вас - не HTTP - а ваш собственный 

3. 
Цитата
Думаю, что вы вполне можете обойтись и без CGI

Неа smile ! При первом запросе мы запрашиваем Вид документа, а при втором в зависимости от выбора запрашиваем критерии его формирования. Для разных документов разные критерии и список видов обновляется и берется из БД, данные для документа тоже из БД.

Вот то, что вы написали - и есть протокол общения, и никаким вебом здесь не пахнет. Почему?
Как я написал, все гораздо проще. У вас будет никак не веб-сервер - а ваш собственный сервер. Его задача:
принять коннект (запрос от клиента) - и скажем ответить, что все ок, готов дальше работать. Второй прием информации - это прием критериев формирования. Приняли критерии от клиента, и начали работу по формированию документа - связываетесь с БД, все делаете как надо - и передаете клиенту. и разрываете соединение по данному сокету.
Всю обработку по клиенту выделяете в отдельный поток - после 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 секунд
Цитата(Олег2005 @  21.11.2009,  10:49 Найти цитируемый пост)
Всю обработку по клиенту выделяете в отдельный поток - после accept()  делаете CreateThread(), и в этом потоке выполняете всю описанную выше работу. Поток потом убиваете.

самый ущербный и непроизводительный способ
хотя бы уж тогда pre-fork использовать...

Добавлено через 10 минут и 25 секунд
Цитата(KVA @  21.11.2009,  08:13 Найти цитируемый пост)
Взаимодействие клиент-сервер в сокетах очевидно. А вот cgi 

вот простейший CGI-модуль на C
Код

int main()
{
    printf("HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Type: text/plain\r\nContent-Length: 13\r\n\r\nHello, world!");
    return 0;
}

Автор: KVA 21.11.2009, 13:21
Олег2005, большое спасибо, наконец-то я поняла про сервера  smile .

Цитата
У вас будет никак не веб-сервер - а ваш собственный сервер. Его задача:
принять коннект (запрос от клиента) - и скажем ответить, что все ок, готов дальше работать. Второй прием информации - это прием критериев формирования. Приняли критерии от клиента, и начали работу по формированию документа - связываетесь с БД, все делаете как надо - и передаете клиенту. и разрываете соединение по данному сокету

А как же платформонезависимость? Какая нужна библиотека по сокетам?

MAKCim, вы, как я поняла, за cgi?


Автор: MAKCim 21.11.2009, 13:30
Цитата(KVA @  21.11.2009,  13:21 Найти цитируемый пост)
MAKCim, вы, как я поняла, за cgi?

я за http ;)
а уж кто конкретно будет заниматься обработкой не суть важно

Автор: Олег2005 21.11.2009, 21:30
Цитата(KVA @  21.11.2009,  12:21 Найти цитируемый пост)
А как же платформонезависимость? Какая нужна библиотека по сокетам?

Для того, чтобы обеспечить минимальную платформонезависимость, надо при программировании на Виндовс использовать только сокетные функции в стиле Беркли - т.е. те, которые Виндовс поддерживает с самого начала его истории  и никаких WSA.......
Кроме того, придется при переходе на иную платформу перекомпилировать исходник, есть приемы программирования  - я только их точно не знаю....... smile 
 

Автор: jonie 21.11.2009, 21:44
стоп. Давайте все сначала определяться ЧТО надо и КАКИЕ условия, а потом будем http-сить...а для этого надо ответить на вопросы:
1) можно ли использовать бибилотеки вроде libcgi или gSOAP, почему нельзя (или другие, подходящие под лицензии, например BSD, MIT) ?;
2) на каких платформах всё это должно работать;
3) как вы собираетесь делать pdf ?;
4) будет ли у вас сервер, который позволит вашу программу запустить вообще (хост сервер, вроде апача или IIS) или его надо будет реализовать также?

Автор: Олег2005 22.11.2009, 23:39
Цитата

везде, где можно следует применять http
унификация вещь серьезная
если понадобится вдруг шифрование, то https как раз будет кстати, стоит ли говорить о том, что существует куча либ, которые уже за нас делают лювиную долю работы, к примеру CURL+SSL ;)


В данном случае не вижу необходимости в HTTP - во всяком случае из постановки задачи
Цитата

самый ущербный и непроизводительный способ
хотя бы уж тогда pre-fork использовать...

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
Цитата

можно ли использовать бибилотеки вроде libcgi или gSOAP, почему нельзя (или другие, подходящие под лицензии, например BSD, MIT

"Необходимо использовать язык ANSI C++, при этом использовать только внешние стандартные функции, входящие в состав любой 32-х разр ОС Linux"
Цитата

на каких платформах всё это должно работать

QNX, Linux,Windows
Цитата

как вы собираетесь делать pdf ?;

Его создает другой объект по входным параметрам и задача решена.
Цитата

будет ли у вас сервер, который позволит вашу программу запустить вообще (хост сервер, вроде апача или IIS) или его надо будет реализовать также

Я разбиралась, разбиралась с серверами и решила, что все-таки это будет cgi-приложение, сервер apache. 
На самом деле задача-то большая, а я выполняю лишь пункт. Поэтому не ругайте меня, что то так, то эдак.  smile 

Автор: jonie 23.11.2009, 10:46
KVA, 
Цитата

"Необходимо использовать язык ANSI C++, при этом использовать только внешние стандартные функции, входящие в состав любой 32-х разр ОС Linux"
линковску статически никто не отменял 8) внешних зависимостей не будет при "работе".... при сборке будут.

ну если у вас будет апач и вы склонны к 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
Цитата(Олег2005 @  22.11.2009,  23:39 Найти цитируемый пост)
В данном случае не вижу необходимости в HTTP - во всяком случае из постановки задачи

а я не вижу смысла писАть свой протокол, не унифицированный, непереносимый, плохо расширяемый ;)

Цитата(Олег2005 @  22.11.2009,  23:39 Найти цитируемый пост)
Создание thread (нити, или «тонкого» процесса) — значительно менее ресурсоемкая по сравнению с fork задача, соответственно, HTTPD, основанные на thread-идеологии, ощутимо быстрее своих fork- и pre-fork-собратьев. 

тот же ajax скажем может генерировать достаточно много запросов, и сколько бы ни стОило создание треда, один поток на каждый accept - это плохо
разве что если быстро нужно что-то рабочее

и приводить апач в качестве примера не стОит, т. к это не самый лучший пример ;) кроме того без nginx его мало кто применяет
lighttpd это совсем другое дело...

Автор: Олег2005 23.11.2009, 18:08
MAKCim, 
может перестанем препираться? smile 
Должен отдать вам должное - вы оказались телепатом - насчет существования у автора Апачей, однако из оригинального поста:
Цитата(KVA @  19.11.2009,  19:36 Найти цитируемый пост)
Сервер- это программа. Где она должна лежать в реальном режиме исполнения? А то в гуге он то appache, то локально на компе, то ещё где-то smile 

это не очевидно - почему я и предположил - что и клиент и сервер - самописные.
А быстро соорудить как все это - я и написал.

Если же есть Апач - то безусловно цги.......а еще лучше - FAST CGI - модуль на апаче есть.....

Автор: KVA 24.11.2009, 10:55
Я почитала в гуге про FAST CGI, начала пробовать
Цитата

#include <fcgi_stdio.h>
#include <stdlib.h>
#pragma comment(lib, "libfcgi.lib")

компилятор жалуется 
Цитата

Cannot open include file: 'fcgi_stdio.h': No such file or directory


Расскажите что делать, где подключать и т.д.

И как организовать, чтобы WEB-интерфейс на JScript послал на apache-сервер пакет на выполнение FAST CGI-модуля с заданными параметрами. 

Автор: jonie 24.11.2009, 18:57
http://www.fastcgi.com/drupal/node/5
качайте библиотеку с хедерами и прочим барахлом.

Цитата

И как организовать, чтобы WEB-интерфейс на JScript послал на apache-сервер пакет на выполнение FAST CGI-модуля с заданными параметрами. 
послать POST (или GET) запрос к серверу ?

Автор: 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
Всё, всем спасибо. Пошла писать  smile . Вроде помогли, поэтому тема закрыта. Если будут вопросы, то будут и другие темы, типа "Помогите девушке-2" smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)