![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| TheDestroyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Самый простой метод - взять все исходные файлы от zlib и добавить их в проект. Метод посложнее - сделать из них статическую библиотеку (в VS это специальный тип Win32 проекта - Static Library) и ее прилинковать к программе
Это сообщение отредактировал(а) xvr - 27.5.2009, 15:04 |
||||||
|
|||||||
| TheDestroyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Удалось сделать статическую библиотеку и прилинковать ее к проекту.
Для этого пришлось сделать изменения в исходниках zlib (найдено в инете):
Также получилось засунуть 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() {} в отдельный фаил. |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Так же, как и текстовые. Файлы они и в африке файлы
Нужно в описании класса WEB_Server (в web_server.h) добавить вашу функцию web_process() Ее тело можно расположить в отдельном файле (например в web_process.cpp) В начале web_process.cpp надо сделать #include "web_server.h" |
||||
|
|||||
| TheDestroyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Делаю так, но при компиляции в случае если прописать в 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 |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
В самом начале web_process.cpp нужно написать #include "StdAfx.h" (самой первой строкой)
|
||||
|
|||||
| TheDestroyer |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
Спасибо, получилось, правда пришлось перенести некоторые объявления из web_server.cpp в web_server.h.
Столкнулся с проблемой: Есть моменты, когда необходимо передавать клиенту информацию несколько раз (или в цикле). Например, идет какой-то процесс и пишет свой лог, этот лог необходимо выдавать по мере его появления. В php делал так:
Т.е. делал вывод в цикле, в браузер приходило все сразу как только появлялось в пайпе вывода. Здесь же пробую делать так:
В логе сервера появляется ошибка: Connection reset by network layer (11138616) Видимо, сервер закрывает соединение сразу после отсылки информации. А как сделать вывод в браузер информации в реальном времени, на подобии примера на php? |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| xvr |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Угу. Система расчитанна на отправку данных одним куском. Она проставляет размер данных в соотвествующем поле заголовка (Content-Length) и закрывает соединение после отправки
|
||||||
|
|||||||
| TheDestroyer |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
С chunked пока не удалось реализовать частичную передачу, оставил вариант
Есть необходимость передавать на сервер файлы. Выдаю клиенту форму
Как осуществить прием файлов? |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Взять полновесный WEB сервер У меня где то были сорцы, которые этим занимались, но это еще столько же кода, сколько там уже есть В общем смотреть RFC с описанием MIME кодирования |
|||
|
||||
| TheDestroyer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Увы, сорцы похоже канули в лету
|
|||
|
||||
| TheDestroyer |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 5.11.2007 Репутация: нет Всего: нет |
С закачкой файлов пока не разобрался. Но появились вопросы:
1. Как указать кодировку в которой выдавать браузеру текст? Я использую JavaScript (XMLHttpRequest), при обращении к этой функции в браузере (IE) возникает ошибка ("Ошибка c00ce56e."), поиск показал, что используется неправильная кодировка. Для cp-1251 так?
А как для UTF-8 ? 2. Проблема с редиректом. Использую функцию A.send_redir(redirect_url). В IE редирект проходит нормально, а в FireFox просто выдается весь текст страницы на белом фоне (т.е. воспринимается как plaintext). Посмотрел в FireBug в FireFox, там такая картина:
т.е. получается, что head уже отправлен браузеру и все что я отправляю далее считается телом страницы (первые 3 строки FireFox вставил сам, отправленный мной текст начинается с "<html><head> <style type=..."). Как правильно делать редирект? Это сообщение отредактировал(а) TheDestroyer - 24.6.2009, 18:12 |
||||
|
|||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 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
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |