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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Web интерфейс программы 
:(
    Опции темы
TheDestroyer
Дата 27.5.2009, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

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



Хотелось бы библиотеку zlib встроить в исполняемый фаил.
Скачал zlib1.2.3 c http://www.zlib.net/ (zlib source code, version 1.2.3, zipfile format)
Нашел инструкцию как скомпилировать zlib1.dll, а как встроить в exe-шник пока не могу найти. Если несложно, укажите, пожалуйста, как это сделать, ссылки на информацию или просто ключевые слова для поиска.
Также хотелось бы узнать о встраивании самих файлов с JavaScript кодом или других (возможно картинок) в спец. секцию исполняемого файла.
Вот что нашел по данной теме:
ссылка1, ссылка2, ссылка3
Получается после доставания из ресурсов фаил необходимо сохранить где-то. В приведенной Вами реализации, видимо, он сохраняется в оперативной памяти? 


Это сообщение отредактировал(а) TheDestroyer - 27.5.2009, 15:10
PM MAIL   Вверх
xvr
Дата 27.5.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(TheDestroyer @ 27.5.2009,  14:41)
Хотелось бы библиотеку zlib встроить в исполняемый фаил.
Скачал zlib1.2.3 c http://www.zlib.net/ (zlib source code, version 1.2.3, zipfile format)
Нашел инструкцию как скомпилировать zlib1.dll, а как встроить в exe-шник пока не могу найти. 

Самый простой метод - взять все исходные файлы от zlib и добавить их в проект. Метод посложнее - сделать из них статическую библиотеку (в VS это специальный тип Win32 проекта - Static Library) и ее прилинковать к программе
Цитата

Также хотелось бы узнать о встраивании самих файлов с JavaScript кодом или других (возможно картинок) в спец. секцию исполняемого файла.
Пакуешь их все в zip архив (my_zip_archive.zip), в .rc файл проекта добавляешь 
Код

RESPACK RCDATA "my_zip_archive.zip"



Это сообщение отредактировал(а) xvr - 27.5.2009, 15:04
PM MAIL   Вверх
TheDestroyer
Дата 28.5.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

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



Удалось сделать статическую библиотеку и прилинковать ее к проекту.
Для этого пришлось сделать изменения в исходниках zlib (найдено в инете):
Код

movd mm4, [ESP +0] ==> movd mm4, DWORD PTR [ESP +0]
movd mm5,[esp+4]==>    movd mm5,dword ptr [esp+4]
movd mm7,[esi]==>    movd mm7,dword ptr [esi]
movd mm7,[esi]==> movd mm7,dword ptr [esi]

Также получилось засунуть zip фаил в ресурсы и достать из него текстовые файлы!
А как достать, например, картинку из этого zip архива, чтобы показать ее на страничке сайта?
Также хочется вынести функцию динамической генерации страничек в отдельную функцию в отдельном файле, т.к. она будет довольно большая. Т.е. сделать функцию void WEB_Server::web_process() {} в отдельном файле web_process.cpp. Делал так:
1. Создал фаил web_process.h в нем объявил WEB_Server::web_process(); , в web_process.cpp сделал #include "web_process.h". В web_process.h сделал #include "web_process.h". При компиляции вылетает куча ошибок о повторном определении функций и т.д.
2. Объявляю web_process() в web_server.h. Но надо как-то укзать что она находится в другом файле. Сответственно делаю в web_server.cpp #include "web_process.cpp". Но при компиляции вылезает ошибка, что в web_process.cpp WEB_Server: не является именем класса или пространства имен. Т.е. не видит класса WEB_Server.
Подскажите, плз, как вынести функцию void WEB_Server::web_process() {} в отдельный фаил.


PM MAIL   Вверх
xvr
Дата 28.5.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(TheDestroyer @ 28.5.2009,  12:31)
Также получилось засунуть zip фаил в ресурсы и достать из него текстовые файлы!
А как достать, например, картинку из этого zip архива, чтобы показать ее на страничке сайта?

Так же, как и текстовые. Файлы они и в африке файлы  smile 

Цитата

Также хочется вынести функцию динамической генерации страничек в отдельную функцию в отдельном файле, т.к. она будет довольно большая. Т.е. сделать функцию void WEB_Server::web_process() {} в отдельном файле web_process.cpp. Делал так:
1. Создал фаил web_process.h в нем объявил WEB_Server::web_process(); , в web_process.cpp сделал 
Ой.
Нужно в описании класса WEB_Server (в web_server.h) добавить вашу функцию web_process()
Ее тело можно расположить в отдельном файле (например в web_process.cpp)
В начале web_process.cpp надо сделать #include "web_server.h"

PM MAIL   Вверх
TheDestroyer
Дата 28.5.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

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



Цитата(xvr @  28.5.2009,  12:45 Найти цитируемый пост)
Нужно в описании класса WEB_Server (в web_server.h) добавить вашу функцию web_process()
Ее тело можно расположить в отдельном файле (например в web_process.cpp)
В начале web_process.cpp надо сделать #include "web_server.h"

Делаю так, но при компиляции в случае если прописать в web_process.cpp  #include "web_server.h" высыпает больше 100 синтаксических ошибок в файле tcp_server.h. Напомню, что в начале файла web_server.h стоит #include "tcp_server.h". Видимо надо прядок includ-ов как-то поменять.

Это сообщение отредактировал(а) TheDestroyer - 28.5.2009, 14:18
PM MAIL   Вверх
xvr
Дата 28.5.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(TheDestroyer @ 28.5.2009,  14:11)
Делаю так, но при компиляции в случае если прописать в web_process.cpp  #include "web_server.h" высыпает больше 100 синтаксических ошибок в файле tcp_server.h. 

В самом начале web_process.cpp нужно написать #include "StdAfx.h" (самой первой строкой)
Цитата

Напомню, что в начале файла web_server.h стоит #include "tcp_server.h". Видимо надо прядок includ-ов как-то поменять.
Угу, StdAfx.h должен быть первый - в нем прописанны все include'ы и описания, общие для всех модулей.

PM MAIL   Вверх
TheDestroyer
Дата 28.5.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

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



Спасибо, получилось, правда пришлось перенести некоторые объявления из web_server.cpp в web_server.h.
Столкнулся с проблемой:
Есть моменты, когда необходимо передавать клиенту информацию несколько раз (или в цикле). Например, идет какой-то процесс и пишет свой лог, этот лог необходимо выдавать по мере его появления.
В php делал так:
Код

 while (!feof($pipes[1])) 
{
$pr_page = fgets($pipes[1], 1024);
$pr_page = str_replace("\n","<br>",$pr_page);
echo $pr_page;
flush();
}

Т.е. делал вывод в цикле, в браузер приходило все сразу как только появлялось в пайпе вывода.
Здесь же пробую делать так:
Код

string d = "CHECK!!!";
if (!d.empty()) A.send_file_data(d,find_file_type(get_file_ext(fname)),true);

d = "CHECK123!!!";
if (!d.empty()) A.send_file_data(d,find_file_type(get_file_ext(fname)),true);

В логе сервера появляется ошибка: Connection reset by network layer (11138616)
Видимо, сервер закрывает соединение сразу после отсылки информации. А как сделать вывод в браузер информации в реальном времени, на подобии примера на php?
PM MAIL   Вверх
azesmcar
Дата 28.5.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(TheDestroyer @  28.5.2009,  15:14 Найти цитируемый пост)
Видимо, сервер закрывает соединение сразу после отсылки информации. А как сделать вывод в браузер информации в реальном времени, на подобии примера на php? 

а как идет вывод? через cout?
тогда
Код

std::cout << "something" << std::flush;

PM   Вверх
xvr
Дата 28.5.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(TheDestroyer @ 28.5.2009,  15:14)
Столкнулся с проблемой:
Есть моменты, когда необходимо передавать клиенту информацию несколько раз (или в цикле). Например, идет какой-то процесс и пишет свой лог, этот лог необходимо выдавать по мере его появления.

Здесь же пробую делать так:
Код

string d = "CHECK!!!";
if (!d.empty()) A.send_file_data(d,find_file_type(get_file_ext(fname)),true);

d = "CHECK123!!!";
if (!d.empty()) A.send_file_data(d,find_file_type(get_file_ext(fname)),true);

В логе сервера появляется ошибка: Connection reset by network layer (11138616)
Видимо, сервер закрывает соединение сразу после отсылки информации.

Угу. Система расчитанна на отправку данных одним куском. Она проставляет размер данных в соотвествующем поле заголовка (Content-Length) и закрывает соединение после отправки
Цитата

А как сделать вывод в браузер информации в реальном времени, на подобии примера на php?
Надо менять логику вывода. Она содержится в методе HTTP_SendAns::send_file_data
  •  Убрать поле Content-Length из заголовка (строка 387)
  •  Дописывать данные через метод HTTP_SendAns::write
Но это не очень чесный метод, для честного обновления страницы надо делать chunked передачу (в RFC расписанно)

PM MAIL   Вверх
TheDestroyer
Дата 1.6.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

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



С chunked пока не удалось реализовать частичную передачу, оставил вариант 
Цитата(xvr @  28.5.2009,  16:40 Найти цитируемый пост)
 Убрать поле Content-Length из заголовка (строка 387)
 Дописывать данные через метод HTTP_SendAns::write

Есть необходимость передавать на сервер файлы. Выдаю клиенту форму
Код

page ="<form method=post enctype='multipart/form-data'>"
"Укажите фаил: <br>"
"<input type='file' name='userfile' size=50 class=tbox><br>"
"<input type='submit' name=\"upload\" class='button' value='Upload'>"
"</form>";
if (!page.empty()) A.send_file_data(page,find_file_type(get_file_ext(fname)),true);

Как осуществить прием файлов?
PM MAIL   Вверх
xvr
Дата 1.6.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(TheDestroyer @ 1.6.2009,  20:39)
Как осуществить прием файлов?

Взять полновесный WEB сервер  smile При передаче файла включается передача как multipart/form-data, т.е. в принятом потоке надо делать полноценный MIME разбор. Включая поддержку multipart и всех transfer-encoding, которые захочет использовать сервер (хотя их можно и ограничить)
У меня где то были сорцы, которые этим занимались, но это еще столько же кода, сколько там уже есть  smile И я их вряд ли найду - уж очень давно это было

В общем смотреть RFC с описанием MIME кодирования

PM MAIL   Вверх
TheDestroyer
Дата 1.6.2009, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

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



Да, уже копаю в сторону парсинга multipart/form-data. 
Нашел http://www.oreillynet.com/onjava/blog/2006...multiparts.html. 
http://pocoproject.org/download/, там много инструменов для работы с сетью (в частности class MultipartReader), но использование этой библиотеки означает, что появятся дополнительные файлы помимо исполняемого файла, и не хочется бросать то, что уже сделано, по идее остается добавить только парсинг multipart/form-data для закачки файлов на сервер. Если все-таки найдутся сорцы, то буду признателен.

Это сообщение отредактировал(а) TheDestroyer - 1.6.2009, 23:35
PM MAIL   Вверх
xvr
Дата 2.6.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Увы, сорцы похоже канули в лету  smile Оторвите от библиотеки class MultipartReader и приделайте к себе, и никаких дополнительных файлов не надо

PM MAIL   Вверх
TheDestroyer
Дата 24.6.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 5.11.2007

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



С закачкой файлов пока не разобрался. Но появились вопросы:
1. Как указать кодировку в которой выдавать браузеру текст? Я использую JavaScript (XMLHttpRequest), при обращении к этой функции в браузере (IE) возникает ошибка ("Ошибка c00ce56e."), поиск показал, что используется неправильная кодировка. Для cp-1251 так?
Код

setlocale(LC_ALL,"Russian");

А как для UTF-8 ?
2. Проблема с редиректом. Использую функцию A.send_redir(redirect_url). В IE редирект проходит нормально, а в FireFox просто выдается весь текст страницы на белом фоне (т.е. воспринимается как plaintext). Посмотрел в FireBug в FireFox, там такая картина:
Код

<html>
<head/>
<body>
<pre><html><head> <style type="text/css">body { color: #000; font: 12px tahoma, verdana, arial, sans-serif; background-color: Gray; margin:0px; text-align:left;
...

т.е. получается, что head уже отправлен браузеру и все что я отправляю далее считается телом страницы (первые 3 строки FireFox вставил сам, отправленный мной текст начинается с "<html><head> <style type=...").
Как правильно делать редирект?


Это сообщение отредактировал(а) TheDestroyer - 24.6.2009, 18:12
PM MAIL   Вверх
xvr
Дата 24.6.2009, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Для указания кодировки используется поле заголовка Content-Type:, параметр charset=. Сервер автоматически выставлял CP1251 для текстовых файлов (см HTTP_SendAns::send_file_data)

Редирект можно делать специальными кодами возврата (30х) (см закоментареную часть в HTTP_SendAns::send_redir), но это не работало на некоторых проксях

Поэтому редирект делается через заголовок HTML страницы, META http-equiv Refresh. Т.е. редирект делается самим браузером путем немедленной перезагрузки страницы с другого URL

Цитата

Посмотрел в FireBug в FireFox, там такая картина:
А откуда взялся текст в странице? send_redir формирует пустую HTML страницу, у нее отлько служебное поле в заголовке HTML, больше ничего

PM MAIL   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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