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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HTTP сервер 
:(
    Опции темы
Kipter
Дата 2.5.2007, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Сириус
внимательно посматрел на твой код.... ты совершаешь большую ошибку в обработке запросов... а точнее обработки запросов вообще нет!

Браузер может слать твоюему серверу все что угодно! хоть http://127.0.0.1/djafipsfshcjsdcjsld/
и твой сервер выдаст ему страницу html! потому что ты не проверяешь запрос!
Неважно что пришло - отошлите ему ХТМЛ код....

Потом при втором запросе - та же каша... неважно что пришло во втором запросе, отошлите ему то-то....
сделай так....

каждый приход запроса - это одна интерация цикла! 
дальше как только он пришел - анализ запроса
дальше - формирование ответа и собственно его отсылаем и закрываем соеденение с клиентом...
пока ты не скажешь клиенту что все передано соедениение закрываем... клиент будет дальше ждать данных...
а в броузере будет зависший прогресс бар загрузки страницы.... 
PM MAIL   Вверх
Сириус
Дата 3.5.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Kipter благодарю за ответ. Проблема вот в чем..я не получаю запроса на картинку! А должен получать.
Я после того как пошлю ответ на запрос клиента, то есть отклик сервера, который будет состоять из HTML кода, должен получить от клиента (в данном случае браузера IE) ответный запрос на уже картинку. Я ее не получаю.
А не обрабатываю запросы, чтоб все проще было..пока что у меня главная проблема, представь что я хочу 5 картинок выставить на хтмл страничке, как мне это сделать? Я просто не знаю как это делается!...Вот главная проблема. Читал RFC http но там про это нет ничего. Спрашивал каких-то специалистов тоже, они говорили что после того как была послана хтмл страничка, браузер на все теги img src будет поочередно слать запросы, (где как мне тут уже обьяснили, я буду отправлять уже ответы в виде картинок в бинарном виде, НО ТОКО в случае когда на картинку шел запрос). Вот..надеюсь проблема понятна. Вот так все сложно. На самом деле вопрос не такой уж и легкий..а если я ему адрес кину типа 127.0.0.1/image.gif то он покажет, (то есть найдет на моем компе в текущей директории программы картинку image.gif и покажет ) Но  это токо в случае локальном..а если из другого компа подключаться? То это погорит. Не важно, просто моя главная проблема в том что не знаю что слать клиенту и как слать клиенту, чтоб он мне ответный запрос на картинку выслал. Я должен этими запросами-откликами построить ХТМЛ страничку целую. Весь этот процесс..но мой клиент посылает токо один запрос обычный..(когда набираю http://127.0.0.1/ ) запрос на GET / -  я теоретически должен ему слать страничку ХТМЛ и он уже должен колдовать мне запросы на картинки..по очереди, а я по очереди буду слать ему их в бинарном виде. Если ХТМЛ страничка состоит из картинок токо. Вот, но я пробовал слать и ХТМЛ код и все все..но не добиваюсь ответа следующего от клиента(уже на конкретный файл (в данном случае картинку) ).... :(
PM MAIL   Вверх
GremlinProg
Дата 3.5.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



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


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Vaulter
Дата 3.5.2007, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



http://127.0.0.1/Picture.jpg
спасибо за ссылку
отловил одну ошибку smile


GremlinProg, пришел к такому выводу на втором сообщении в этой теме smile


Это сообщение отредактировал(а) Vaulter - 3.5.2007, 21:35


--------------------
PM MAIL WWW ICQ   Вверх
GremlinProg
Дата 3.5.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Vaulter, ну может сейчас проверит )

ужас, в этой теме слишком много слов, наверное, все таки стоит делить большие монологи на абзацы, а то складывается впечатление, что у авторов такое же настроение, как и их сообщения: длинные и монотонные...


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Kipter
Дата 4.5.2007, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Сириус @  3.5.2007,  21:09 Найти цитируемый пост)
А не обрабатываю запросы, чтоб все проще было..пока что у меня главная проблема, представь что я хочу 5 картинок выставить на хтмл 

Это не проще... это наоборот сложнее выходит =)
Во первых при обработке можно легко понять а приходит что то или нет.. с выводом всего этого на экран
Во вторых а понадобится тебе 6 картинок... или еще и CSS таблицу подгрузить... и что перелапачивать код и поочередность принятия или отдачи пакетов?
В третьих, броузер может скешировать 1 картинку так как он ее знает и запросит сразу вторую на что получит совершенно не ту =)

Сделай всетаки обработчик запросов.


Цитата(Сириус @  3.5.2007,  21:09 Найти цитируемый пост)
кину типа 127.0.0.1/image.gif то он покажет, (то есть найдет на моем компе в текущей директории программы картинку image.gif и покажет ) Но  это токо в случае локальном..а если из другого компа подключаться?

Видимо всетаки броузер грузит эту картинку не с твоего серверного приложения, а грузит ее по локальному пути... твоего компьютера...
Покажи код где твое серверное приложение отправляет картинку....

PM MAIL   Вверх
Сириус
Дата 4.5.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



GremlinProg проверил, в настройках все ок. (Отображение картинки есть)
Vaulter какую ошибку отловил?
Kipter  вот 

Код

        strcpy(szSendBuff, "<html><body><img src='C:\\Documents and Settings\\Vahe\\My Documents\\My Pictures\\full.gif'>");

        ret= send(sock, szSendBuff,strlen(szSendBuff),0);

        if(ret==SOCKET_ERROR)
        {
            break;
        }
        memset(szSendBuff,0,sizeof(szSendBuff));
        strcpy(szSendBuff, "<img src='C:\\Documents and Settings\\Vahe\\My Documents\\My Pictures\\ngc2.jpg'>");
        ret= send(sock, szSendBuff,strlen(szSendBuff),0);
        memset(szSendBuff,0,sizeof(szSendBuff));
        strcpy(szSendBuff, "<img src='http://127.0.0.1/links.jpg'>");
        ret= send(sock, szSendBuff,strlen(szSendBuff),0);    




Вот тут я отправил две картинки (через пути локальные) и они нормально отображаются на страничке (но этот вариант, как все уже говорили, не будет работать если с другого компа подключаться на мой сервер), а 3-ую по ссылке 'http://127.0.0.1/links.jpg' и она не отображается (на страничке токо крестик, как бывает когда картинка не грузится) . Картинка links у меня в директории debug-а, так что все правильно..я думаю тут я должен был получить запрос на картинку, после чего я должен был послать ее в бинарном виде, но ее(запроса на картинку) нет. В коде я ставил recv, (сейчас их убрал кроме первой) никаких запросов не приходило. Короче первые две картинки показывает, но метод не тот, а 3-ю не показывает вообще.


"Во первых при обработке можно легко понять а приходит что то или нет.. с выводом всего этого на экран
Во вторых а понадобится тебе 6 картинок... или еще и CSS таблицу подгрузить... и что перелапачивать код и поочередность принятия или отдачи пакетов?
В третьих, броузер может скешировать 1 картинку так как он ее знает и запросит сразу вторую на что получит совершенно не ту =)"


Ты совершенно прав, это я понимаю.. надо запросы обрабатывать, но пока я их через debug отлавливаю и могу так проверять..мне токо понять как этот диалог между сервером и клиентом правильно вести, чтобы отобразить всю страничку, а дальше я к нормальному виду все приведу. Пока что у меня всего один жалкий запрос...мне нужно самое главное понять, механизм работы, а так остальное уже не такая проблема.

Это сообщение отредактировал(а) Сириус - 4.5.2007, 09:58
PM MAIL   Вверх
Сириус
Дата 5.5.2007, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Господа, я смог сделать так чтоб пришел запрос на картинку! НО это похожа на очень сложную загадку (хотя решение ее будет думаю после того как его обьявят казаться весьма простым, как обычно). Вот как:

Код

        ret=recv(sock,szRecvBuff, 4096, 0); //тут запрос на страничку всю
        if(ret==0)
            break;
        else if(ret== SOCKET_ERROR)
        {
            MessageBox(0, "Ne poluchili infu", "Error", 0);
            break;
        }
        szRecvBuff[ret]='\0';

strcpy(szSendBuff, "HTTP/1.1 200 OK\r\n Content-length:128\r\n Content-Type: image/jpeg; charset=windows-1251\r\n\r\n<img src='http://127.0.0.1/links.jpg'>");


        ret= send(sock, szSendBuff,strlen(szSendBuff),0);

        ret= send(sock, szSendBuff,strlen(szSendBuff),0);

        if(ret==SOCKET_ERROR)
        {
            break;
        }

                
        ret=recv(sock,szRecvBuff, 4096, 0); //А ТУТ ВАУ! ЗАПРОС НА кАРТИНКУ links.jpg'


Ну вот вам и загадка непростая..(непростая раз уж никто не додумался)
В чем смысл? Почему именно два раза нужно делать
        ret= send(sock, szSendBuff,strlen(szSendBuff),0);

        ret= send(sock, szSendBuff,strlen(szSendBuff),0); 
? а не один раз...почему??? Давайте рассуждать, проблема думаю интересная.
Причем еще один тонкий момент..если я перезагружу сервер (заново запущу) и на страничку кликну просто рефреш, то опять запроса на картинку не будет..надо заново открыть новую страничку и там написать адрес http://127.0.0.1 
Но это еще так..не важно, не настоко важно как момент с двумя sendАМи!..Короче что вы об этом думаете?

Это все сложнее чем я думал, а материалов подробный нет..в RFC по http ничего не говорится про надобность посылок двух запросов, вообще про сам механизм там весьма поверхностно, изучать исходники Apache ужасно сложно..единственный сайт который я нашел по инофрмации о серверах - это http://apachedev.ru/2006/03/05/the-apache-...glava-4-chast-1  , но если вы знаете какие-нибудь другие сайты которые могут быть мне полезны, то прошу киньте ссылки..(или сайты где есть примеры серверов, не таких огромных как Apache, чтоб можно было изучить быстрее..исходники серверов) и т.п. 

Это сообщение отредактировал(а) Сириус - 5.5.2007, 22:32
PM MAIL   Вверх
andrew_121
Дата 29.6.2009, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Бред какой-то smile 
Почему не приходит запрос на картинку? В коде есть ссылка на нее. Клиент ведь должен ее попросить!!!

Спустя два года smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
REZiaMIX
Дата 5.7.2009, 05:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Обо всем по порядку.
Для начала , разбираться в тупую - долгое дело.
Самое простое - поставить apache, сделать тот же сайт с картинкой и html и разбирать любым http сниффером.

Теперь о деле:
Клиент запрашивает страницу:
"GET /  ......."
Тут сервер должен понять что запрашивают именно "/" , т.е. рут сайта.
Сервер соответственно выдает клиенту(браузеру):
Код

<html>
<img src = "ababa.jpg">
</html>

У клиента соответственно грузится страничка иии... , надо ведь картинку загрузить!
Клиент делаеть запрос:
"GET /ababa.jpg  ......."
Сервер понимает что надо выдать картинку(но выдать может что хочешь)
и выдает:
"Content-type: image/jpeg ..... содержимое".
Но по факту , заголовки можно вообще не выдавать(забить на стандарты, чтобы лишний код не писать) , а выдавать сразу же бинарное содержимое файла.

В итоге самый легкий план для обучения таков:
Сервер: ожидание соединения
Клиент: подключение , шлем get ... 
Сервер: принимаем данные , парсим запрос

Если запрос "/" тогда выдаем "<html><img src = "ababa.jpg"></html>"(сбрасываем соединение) , гоу ту пункт 1
Если запрос "/ababa.jpg"
Считываем любым путем нужный файл(по факту это может быть и не jpg)
Код

mFile = fopen("c:\\ababa.jpg","rb");
for(...)
{
         fread(buffer,1024,1,mFile);
         send(mysock,buffer,1024,0);
}


Добавлено @ 05:18
Вот код из моего давнего проекта, что то типа веб-интерфейса к проге.
Получала аргументы простые через GET, сложные через POST
Код

                buff[inputbuffer_size-1]='\0';
        MainInterface.connection = getIncomingSocket(MainInterface.port); //Ждем подключения клиента
                // есть коннект!
        recv(MainInterface.connection->retsock,buff,inputbuffer_size,NULL); //Получим запрос
        data_type = GetDataType(buff); //Тут узнаем что за данные пришли(вроде бы если POST, тогда возвр. 1 , если GET , то 0)
        
        if (data_type)  //это POST ?
        {
            recv(MainInterface.connection->retsock,buff,inputbuffer_size,NULL);    //Получим POST
            parseform(buff,data,rtbuffers_size); //Да распарсим его!
        } 
        else
            parsefirst(buff,inputbuffer_size,rcv,rtbuffers_size); // GET ! , РАСПАРСИМ ЕГО)



data , rcv - особые командные буфферы , но смысл понятен.
После этого в data - результат парсинга POST
или в rcv - результат парсинга GET
data_type - тип запроса;

Далее соответственно проверка , что же за команды нам пришли и соответственно выдача того что надо.
Можно выдать прямо сразу бинарными данными jpg - фаерфокс прекрасно понимал)))

Добавлено через 14 минут и 25 секунд
Цитата(andrew_121 @ 29.6.2009,  07:51)
Бред какой-то smile 
Почему не приходит запрос на картинку? В коде есть ссылка на нее. Клиент ведь должен ее попросить!!!

Спустя два года smile

Вот ты некромант , я ведь не посмотрел даж на дату !)
Писал мучался... ну ладно может кто через поиск найдет.

Это сообщение отредактировал(а) REZiaMIX - 5.7.2009, 05:19


--------------------
user posted image
PM MAIL   Вверх
andrew_121
Дата 5.7.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Цитата(REZiaMIX @  5.7.2009,  05:08 Найти цитируемый пост)
Вот ты некромант

Так я же недавно вопрос задал)


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
TheDestroyer
Дата 24.7.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(andrew_121 @  29.6.2009,  07:51 Найти цитируемый пост)
Почему не приходит запрос на картинку? В коде есть ссылка на нее. Клиент ведь должен ее попросить!!!

Скорее всего потому, что клиент - браузер IE. А он постоянно все кэширует. Надо тестить либо в ФФ, где нет кэширования такого, либо слать браузеру типа:
Код

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Pragma: no-cache');

В свое время намучался с непонятным отсутствием запроса к веб серверу.
PM MAIL   Вверх
jonie
Дата 24.7.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



Цитата


В свое время намучался с непонятным отсутствием запроса к веб серверу. 
а если бы знали как отлаживать то и не мучались бы )
Fiddler возьмите и смотрите что делает IE


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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