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

Поиск:

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


Шустрый
*


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

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



Здравствуйте
У меня в следующем проблема:

написал сервер  (на локальном компе 127.0.0.1 на порт 80)
Теперь когда клиент на сервер идет, устанавливается соединение и я ему посылаю картинку. 
Вот как я это делаю 

strcpy(szSendBuff, "<h2>hello</h2><img src='/mesto kartinki na moem kompe/pic1.jpg'>");
ret= send(sock, szSendBuff,strlen(szSendBuff),0);

Картинка отображается, но мне сказали что токо потау!! (ВНИМАНИЕ) что это работает на локальном компе, еслиб из ругого компа подключились, то у них картинка не отобразилась бы, мол это делается уже по иной структуре 
И сказали про след.  структуру:...
В начале идет просто запрос с картинкой

strcpy(szSendBuff, "<h2>hello</h2><img src='/адреса нет/pic1.jpg'>");
а потом клиент должен отправить ответ запрос что мол где находится картинка и я должен дальше отправить уже адрес.
 Прошу помочь..разьяснить все эти моменты. И еще один момент

когда я вместо картинки скажем пошлю апплет , указав его место на своем компе (в данном случае в текущем каталоге)

strcpy(szSendBuff, "<center><applet code='WelcomeApplet.class' width='400' height='100'></applet></center>");

то он должен как и картинку е го показать (хотя бы потаму что мы на локальном компе сервер наш),
но апплет не показывает..(с апплетом вообще-то все ок, в отдельном html доке он нормально отображается, а так черер запрос - нет) Почему?.. Вот..очень прошу помочь.

код не особо важен..но все же..

Код


    while(1)
    {


        ret=recv(sock,szRecvBuff, 1024, 0);
        if(ret==0)
            break;
        else if(ret== SOCKET_ERROR)
        {
            MessageBox(0, "Ne poluchili infu", "Error", 0);
            break;
        }
        szRecvBuff[ret]='\0';

        //strcpy(szSendBuff, "<h2>hello</h2><img src='pic1.jpg'>");
     strcpy(szSendBuff, "<center><applet code='WelcomeApplet.class' width='400' height='100'></applet></center>");
    //    strcpy(szSendBuff, "</applet></center></html>");
    

        ret= send(sock, szSendBuff,strlen(szSendBuff),0);
        if(ret==SOCKET_ERROR)
        {
            break;
        }

        
        
        ret=recv(sock,szRecvBuff, 1024, 0);
/*
        if(ret==0)
            break;
        else if(ret== SOCKET_ERROR)
        {
            MessageBox(0, "Ne poluchili infu", "Error", 0);
            break;
        }
        szRecvBuff[ret]='\0';
        
        cout<<szRecvBuff<<endl;

*/
        break;
    }


Это сообщение отредактировал(а) Сириус - 16.4.2007, 19:58
PM MAIL   Вверх
likehood
Дата 16.4.2007, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


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

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



Совет: почитай повнимательней документацию по http и включи здравый смысл.
Как по-твоему картинка попадет на удаленный комп? Клиент должен послать get-запрос с адресом картинки, а сервер должен в ответе вернуть ему эту картинку, именно саму картинку, а не ее адрес (за подробностями обращайся к спецификации http). С апплетом тоже самое: код апплета нужно передават в ответ на запрос клиента. Кстати, на локальном машине твой апплет не работает скорее всего потому, что клиент не может его найти (ты ведь не указывал полный путь к файлу апплета).
PM MAIL   Вверх
Сириус
Дата 17.4.2007, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Странно, я читал что можно в поле Location: ставить скажем файл или тип MIME и тогда сервер оттуда сам вытащит и даст клиенту.
Ну ладно, но как у меня придет запрос на картинку?..в начале идет обычный запрос..(при соединении). Потом должен идти ответ от сервера типа с кодом состояние 300-399 что означает что клиент должен переадресовать свой запрос, и уже на картинку, чтоб я ему потом ее послал. Так? Ну ладно..пойду читать RFC. Просто его очень много по HTTP, если вдруг знаешь наизусть и можешь привести пример запросов - ответов именно с вариантом картинки или апплета (апплет там полный путь указан кстати) , то пожалуйста..
PM MAIL   Вверх
ptr
Дата 17.4.2007, 16:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А при чём здесь HTTP? Протокол HTTP служит для передачи данных. Надо читать спецификацию не HTTP, а HTML.


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
Сириус
Дата 17.4.2007, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Неужели никто не разбирается  в этом деле?..
likehood ptr написал сервер на С++. Он ждет подключений на 80 порт. Когда кто-то набирает ( у меня на компе) адрес 127.0.0.1 то подключается к моему жалкому серверу. И тут мой невероятно сложнейший вопрос.....Как сделать вывод картинок (если больше чем одна, да даже хотя бы одну). ? Когда клиент (в данном случае браузер IE) подключается к серверу, он посылает запрос. Могу привести код запроса, но стандартный запрос, ничего особого. Теперь, сервер должен послать ему тАКОЙ отклик чтоб могла отобразится моя картинка, я пробовал разными способами и RFC читал, но не получается. . Фуф.. smile 
Какой отклик слать чтобы клиент получил чертову картинку <img src='adres/pic1.jpg'>  и при этом чтоб еще одну мог получить картинку?..надеюсь никто не сердиться на вопрос. 
     
PM MAIL   Вверх
ptr
Дата 18.4.2007, 15:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Клиент(IE) тебе шлёт GET запрос. Тебе лишь нужно правильно его обрабатывать.
Например:
Запрос
Код

GET /pic1.jpg HTTP/1.1
Host: adres
Connection: close


Ответ
Код

HTTP/1.1 200 OK
Accept-Ranges:    bytes    
Content-Length:    654
Connection:    close
Content-Type:    image/jpg

<<Content>>

Картинку кстати надо читать как бинарный файл.
Да и чтобы посмотреть реальные запросы/ответы можно воспользоваться http://web-sniffer.net/.


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
Сириус
Дата 19.4.2007, 03:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо ptr ! Но дело в том что клиент не посылает мне этого запроса..он даже не в курсе что у меня картинка есть..вот в этом вся проблема, я должен ему как-то сообщить что имею картинку, чтоб потом он послал запрос на эту картинку. Я пробовал, но у меня не получается..первый запрос идет на общую страничку.. ( / или скажем index.html ), вот как сообщить клиенту, чтоб он запрос кинул на картинку, чтоб потом я ему его послал. Я пробовал перенаправление запроса типа с кодом 303, указывая  smile   Location: путь к картинке у себя на компе (по сути это ничего не должно говорить клиенту, за исключением того что надо послать запрос на получение картинки) но ничего не выходит.
 smile Помогите 
PM MAIL   Вверх
likehood
Дата 19.4.2007, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


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

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



Клиетну ничего сообщать не надо. Если на главной страничке index.html есть ссылка на картинку и если в браузере не отключен показ рисунков, клиент обязательно запросит картинку.
PM MAIL   Вверх
GremlinProg
Дата 24.4.2007, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Сириус, ты когда-нибудь видел в коде HTML локальнуе пути? Т.Е что-то типа того:
<IMG SRC="C:\My Pictures\Picture.jpg">
likehood, верно говорит, включи здравый смысл. Запрос твой сервер не принимает, потому что ты редиректишь клиента черти-куда, он(клиент) даже не пытается ни чего спрашивать у сервера, потому что просто игнорирует неправильный ответ.(не трогай location)

Организуй анализ запроса клиента, при запросе типа GET / посылай ему свой текст HTML, при запросе типа GET /Picture.jpg посылай ему этот жипех файл в БИНАРНОМ виде. Не пробуй сразу использовать все возможности спецификации, двигайся постепенно, тогда все получится.


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


Шустрый
*


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

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



GremlinProg, likehood, ptr  спасибо и вам за то что отозвались, 
Просто я уже по всякому пробую, сразу нападать не надо. Я с самого начала посылал ХТМЛ страницу на первый запрос GET, 
вот в таком виде 
Код

strcpy(szSendBuff, "<html><body><img src='ist2_2229748_snowflakes.jpg'></body></html>");
ret= send(sock, szSendBuff,strlen(szSendBuff),0);

Я уже 100 раз говорил, а вы мне 100 раз предлагаете включить здравый смысл. Очень ценный совет..
На такой запрос в ответ не идет никакого запроса на картинку. 
Я пробовал по всякому..скажем так src="http://127.0.0.1/ist2_2229748_snowflakes.jpg" , вообще без разницы, не посылается запроса на картинку. Я думаю что скорее всего делаю какую-то грубую синтаксическую ошибку. Может быть не просто посылать html код надо, а в формате его отлкика (ну там типа первая строчка HTTP/1.1 200 (или 303 как я пробовал) OK\r\n и так далее по формату).
Так тоже пробовал, но нет реакций.

#define    m "HTTP/1.1 200 OK\r\n Content-length:40\r\n Content-Type: image/jpeg; charset=windows-1251\r\n<img src='ist2_2229748_snowflakes.jpg'>\r\n"
Тут наверное ошибка, как я понимаю, после этого отклика должен приходить запрос на картинку ist2_2229748_snowflakes.jpg..и размер Content-length точный. Вот..

strcpy(szSendBuff, m);

    

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


Эксперт
****


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

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



Цитата(Сириус @  24.4.2007,  15:01 Найти цитируемый пост)
#define    m "HTTP/1.1 200 OK\r\n Content-length:40\r\n Content-Type: image/jpeg; charset=windows-1251\r\n<img src='ist2_2229748_snowflakes.jpg'>\r\n"

Правильно понимаешь

1. Заголовки и контент должны разделяться двумя переводами строки \r\n\r\n (я вообще везде вместо \r\n использую только \n, так проще и структура пакута понятнее)

Добавлено через 6 минут и 33 секунды
2. Может повторюсь, но картинка должна посылаться в бинарном виде!!! т.е. вместо <img src='ist2_2229748_snowflakes.jpg'> тут должно быть содержимое файла жипега (да да, именно содержимое, открываем файл, читаем его размер, выделяем буфер, читаем его в буфер, посылаем его содержимое)

3. Content-length, соответственно должен содержать размер файла, который ты посылаешь, а не длину строки <img src='ist2_2229748_snowflakes.jpg'>. Об этой строку вообще забудь, её не должно быть.


ЗЫ: оказывается Ctrl-Enter тут сабмитит ответ, буду знать ))

Добавлено через 11 минут и 9 секунд
В принципе, первый пункт - это решение проблемы с ответом, но HTTP/1.1, это не то же самое, что HTTP/1.0, работают они по-разному, попробуй, по крайней мере на первое время, использовать HTTP/1.0.


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


Эксперт
****


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

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



Чтобы проверить работоспособность сервера посылаю небольшую утилитку "MegaHttpExtractor", здесь архив из 2-х частей, делал на делфи, поэтому размер почти 400 Кб. Все по-русски и одна кнопка-грабер, думаю разберешся. 

"Адрес" можно вводить как числовой, так и доменный,
"Порт" - пиши свой,
"Запрос" по-умолчанию - стандартный "GET / HTTP/1.0" , тут так же можно экспериментировать
"Отправляемые заголовки" - соответственно, список клиентских заголовков, если нужно, можешь добавлять, они будут встроены автоматически, синтаксис, как в стандарте: одна строка - один заголовок.
"Приходящие заголовки" - соответственно, список всех заголовков, приходящих с сервера
Ну, и "контент", куда ж без него.

Довльно полезная утилитка при отладке стейт-машины на сервере CGI и/или Socket платформ, по крайней мемре на это она была изначально заточена.

Посмотри как раскрываются готовые сервера, для примера яндекс стоит по-умолчанию.
Если ответа нет несколько секунд, значит неправильно оформил пакет, пробуй иначе, тестируй...

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  MegaHttpExtractor.part1.rar 120,00 Kb


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


Эксперт
****


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

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



ЗЫ: Уже не первый раз приходится резать образы, все таки ограничение сверху в 120к лучше расширить. Где вы видели паскалевские программы такого размера?

Присоединённый файл ( Кол-во скачиваний: 19 )
Присоединённый файл  MegaHttpExtractor.part2.rar 44,58 Kb


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


Шустрый
*


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

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



Извини GremlinProg , но я не совсем понял, ты говорил 
"при запросе типа GET / посылай ему свой текст HTML, при запросе типа GET /Picture.jpg посылай ему этот жипех файл в БИНАРНОМ виде"  Так вот если все по порядку, у меня нет запроса на картинку, я пытаюсь сделать так чтоб он был!!! Но его нет! ПРосто нет и все тут! Есть запрос на страничку, в ответ на который я должен ему как ты сказал, посылать текст HTML, вот я и слал текст HTML, ожидая что в ответ он уже пошлет мне запрос на картинку, которую я уже пошлю ему в бинарном виде. Так вот..текст html состоит у меня в теге <center> и <img src="..." > чем не HTML текст? Может мне сразу посылать ему картинку в виде бинарном? Но ведь вы все говорили, что сначала должен быть запрос на картинку..вообщем путаница вышла..


Это сообщение отредактировал(а) Сириус - 1.5.2007, 18:48
PM MAIL   Вверх
Kipter
Дата 2.5.2007, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Сириус
Тебя сложно понять, кто тебе сказал что браузер не посылает запрос на картинку?
после того как ты вывел ему html текст?

Может просто твоя программа и не ожидает второго запроса?
или неправильно его обрабатывает?

Код в студию где происходит Анализ запроса и формирование на него ответа.
(тоесть там где от клиента к тебе приходит запрос, программа его анализирует и выдает либо текст html, либо картинку)

Причем постарайся выложить весь код цикла обработки запросов...

Добавлено через 4 минуты и 7 секунд
Сириус
да кстати еще вижу ты путаешся в принципе работы HTTP Серверов....
Все что ты видишь в броузере - это все передается только программой-HTTP-сервером....
И HTML текст, и Java апплеты и картинки, и видио, и флеш... все передает программа....
Сами компьютеры тупые.... и они никому ничего не передают =) это делают программа....

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

Добавлено через 10 минут
Цитата(Сириус @  1.5.2007,  18:44 Найти цитируемый пост)
Может мне сразу посылать ему картинку в виде бинарном? Но ведь вы все говорили, что сначала должен быть запрос на картинку..вообщем путаница вышла..

Хочешь сразу картинку?

запрос: http://127.0.0.1/Picture.jpg
будет сразу картинка в броузере по такому запросу... но только если ты так запрограммируешь сво сервер!
он должен понять что если ему пришел запрос /Picture.jpg то он должен проверить существование этого фаила и если он есть... прочитать его и отправить клиенту.... если нет то отправить 404 (ошибку)

кстати программист волен делать что хочет, можно и по запросу http://127.0.0.1/Pig.alakazam.bum-bum
Вывести клинту JPG картинку, все зависит от того как сервер обрабатывает запросы и что шлет в ответ клиенту...

и HTML слать я тебе советую из фаила - проще будет разобраться, считывай фаил HTML из фаила и шли его....
А вообще если будет тебе не сложно то можно почитать исходные коды сервера Apache

PM MAIL   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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