![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
Сириус |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 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 доке он нормально отображается, а так черер запрос - нет) Почему?.. Вот..очень прошу помочь. код не особо важен..но все же..
Это сообщение отредактировал(а) Сириус - 16.4.2007, 19:58 |
|||
|
||||
likehood |
|
|||
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
Совет: почитай повнимательней документацию по http и включи здравый смысл.
Как по-твоему картинка попадет на удаленный комп? Клиент должен послать get-запрос с адресом картинки, а сервер должен в ответе вернуть ему эту картинку, именно саму картинку, а не ее адрес (за подробностями обращайся к спецификации http). С апплетом тоже самое: код апплета нужно передават в ответ на запрос клиента. Кстати, на локальном машине твой апплет не работает скорее всего потому, что клиент не может его найти (ты ведь не указывал полный путь к файлу апплета). |
|||
|
||||
Сириус |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Странно, я читал что можно в поле Location: ставить скажем файл или тип MIME и тогда сервер оттуда сам вытащит и даст клиенту.
Ну ладно, но как у меня придет запрос на картинку?..в начале идет обычный запрос..(при соединении). Потом должен идти ответ от сервера типа с кодом состояние 300-399 что означает что клиент должен переадресовать свой запрос, и уже на картинку, чтоб я ему потом ее послал. Так? Ну ладно..пойду читать RFC. Просто его очень много по HTTP, если вдруг знаешь наизусть и можешь привести пример запросов - ответов именно с вариантом картинки или апплета (апплет там полный путь указан кстати) , то пожалуйста.. |
|||
|
||||
ptr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
А при чём здесь HTTP? Протокол HTTP служит для передачи данных. Надо читать спецификацию не HTTP, а HTML.
-------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
|||
|
||||
Сириус |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Неужели никто не разбирается в этом деле?..
likehood ptr написал сервер на С++. Он ждет подключений на 80 порт. Когда кто-то набирает ( у меня на компе) адрес 127.0.0.1 то подключается к моему жалкому серверу. И тут мой невероятно сложнейший вопрос.....Как сделать вывод картинок (если больше чем одна, да даже хотя бы одну). ? Когда клиент (в данном случае браузер IE) подключается к серверу, он посылает запрос. Могу привести код запроса, но стандартный запрос, ничего особого. Теперь, сервер должен послать ему тАКОЙ отклик чтоб могла отобразится моя картинка, я пробовал разными способами и RFC читал, но не получается. . Фуф.. ![]() Какой отклик слать чтобы клиент получил чертову картинку <img src='adres/pic1.jpg'> и при этом чтоб еще одну мог получить картинку?..надеюсь никто не сердиться на вопрос. |
|||
|
||||
ptr |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 661 Регистрация: 31.5.2006 Где: Новосибирск Репутация: 9 Всего: 14 |
Клиент(IE) тебе шлёт GET запрос. Тебе лишь нужно правильно его обрабатывать.
Например: Запрос
Ответ
Картинку кстати надо читать как бинарный файл. Да и чтобы посмотреть реальные запросы/ответы можно воспользоваться http://web-sniffer.net/. -------------------- Единственный способ определить границы возможного - это выйти за эти границы, в невозможное. Артур Кларк. |
||||
|
|||||
Сириус |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Спасибо ptr ! Но дело в том что клиент не посылает мне этого запроса..он даже не в курсе что у меня картинка есть..вот в этом вся проблема, я должен ему как-то сообщить что имею картинку, чтоб потом он послал запрос на эту картинку. Я пробовал, но у меня не получается..первый запрос идет на общую страничку.. ( / или скажем index.html ), вот как сообщить клиенту, чтоб он запрос кинул на картинку, чтоб потом я ему его послал. Я пробовал перенаправление запроса типа с кодом 303, указывая
![]() ![]() |
|||
|
||||
likehood |
|
|||
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
Клиетну ничего сообщать не надо. Если на главной страничке index.html есть ссылка на картинку и если в браузере не отключен показ рисунков, клиент обязательно запросит картинку.
|
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 1 Всего: 106 |
Сириус, ты когда-нибудь видел в коде HTML локальнуе пути? Т.Е что-то типа того:
<IMG SRC="C:\My Pictures\Picture.jpg"> likehood, верно говорит, включи здравый смысл. Запрос твой сервер не принимает, потому что ты редиректишь клиента черти-куда, он(клиент) даже не пытается ни чего спрашивать у сервера, потому что просто игнорирует неправильный ответ.(не трогай location) Организуй анализ запроса клиента, при запросе типа GET / посылай ему свой текст HTML, при запросе типа GET /Picture.jpg посылай ему этот жипех файл в БИНАРНОМ виде. Не пробуй сразу использовать все возможности спецификации, двигайся постепенно, тогда все получится. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Сириус |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
GremlinProg, likehood, ptr спасибо и вам за то что отозвались,
Просто я уже по всякому пробую, сразу нападать не надо. Я с самого начала посылал ХТМЛ страницу на первый запрос GET, вот в таком виде
Я уже 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); |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 1 Всего: 106 |
Правильно понимаешь 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. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 1 Всего: 106 |
Чтобы проверить работоспособность сервера посылаю небольшую утилитку "MegaHttpExtractor", здесь архив из 2-х частей, делал на делфи, поэтому размер почти 400 Кб. Все по-русски и одна кнопка-грабер, думаю разберешся.
"Адрес" можно вводить как числовой, так и доменный, "Порт" - пиши свой, "Запрос" по-умолчанию - стандартный "GET / HTTP/1.0" , тут так же можно экспериментировать "Отправляемые заголовки" - соответственно, список клиентских заголовков, если нужно, можешь добавлять, они будут встроены автоматически, синтаксис, как в стандарте: одна строка - один заголовок. "Приходящие заголовки" - соответственно, список всех заголовков, приходящих с сервера Ну, и "контент", куда ж без него. Довльно полезная утилитка при отладке стейт-машины на сервере CGI и/или Socket платформ, по крайней мемре на это она была изначально заточена. Посмотри как раскрываются готовые сервера, для примера яндекс стоит по-умолчанию. Если ответа нет несколько секунд, значит неправильно оформил пакет, пробуй иначе, тестируй... Присоединённый файл ( Кол-во скачиваний: 23 ) ![]() -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 1 Всего: 106 |
ЗЫ: Уже не первый раз приходится резать образы, все таки ограничение сверху в 120к лучше расширить. Где вы видели паскалевские программы такого размера?
Присоединённый файл ( Кол-во скачиваний: 19 ) ![]() -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Сириус |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 26.11.2005 Репутация: нет Всего: нет |
Извини GremlinProg , но я не совсем понял, ты говорил
"при запросе типа GET / посылай ему свой текст HTML, при запросе типа GET /Picture.jpg посылай ему этот жипех файл в БИНАРНОМ виде" Так вот если все по порядку, у меня нет запроса на картинку, я пытаюсь сделать так чтоб он был!!! Но его нет! ПРосто нет и все тут! Есть запрос на страничку, в ответ на который я должен ему как ты сказал, посылать текст HTML, вот я и слал текст HTML, ожидая что в ответ он уже пошлет мне запрос на картинку, которую я уже пошлю ему в бинарном виде. Так вот..текст html состоит у меня в теге <center> и <img src="..." > чем не HTML текст? Может мне сразу посылать ему картинку в виде бинарном? Но ведь вы все говорили, что сначала должен быть запрос на картинку..вообщем путаница вышла.. Это сообщение отредактировал(а) Сириус - 1.5.2007, 18:48 |
|||
|
||||
Kipter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 114 Регистрация: 2.5.2006 Репутация: нет Всего: нет |
Сириус,
Тебя сложно понять, кто тебе сказал что браузер не посылает запрос на картинку? после того как ты вывел ему html текст? Может просто твоя программа и не ожидает второго запроса? или неправильно его обрабатывает? Код в студию где происходит Анализ запроса и формирование на него ответа. (тоесть там где от клиента к тебе приходит запрос, программа его анализирует и выдает либо текст html, либо картинку) Причем постарайся выложить весь код цикла обработки запросов... Добавлено через 4 минуты и 7 секунд Сириус, да кстати еще вижу ты путаешся в принципе работы HTTP Серверов.... Все что ты видишь в броузере - это все передается только программой-HTTP-сервером.... И HTML текст, и Java апплеты и картинки, и видио, и флеш... все передает программа.... Сами компьютеры тупые.... и они никому ничего не передают =) это делают программа.... Советую тебе сделать вывод на экран входящих запросов при каждой интерации цикла.... и вывод заголовка твоего ответа на это.... отлаживать будет легче.... Добавлено через 10 минут
Хочешь сразу картинку? запрос: http://127.0.0.1/Picture.jpg будет сразу картинка в броузере по такому запросу... но только если ты так запрограммируешь сво сервер! он должен понять что если ему пришел запрос /Picture.jpg то он должен проверить существование этого фаила и если он есть... прочитать его и отправить клиенту.... если нет то отправить 404 (ошибку) кстати программист волен делать что хочет, можно и по запросу http://127.0.0.1/Pig.alakazam.bum-bum Вывести клинту JPG картинку, все зависит от того как сервер обрабатывает запросы и что шлет в ответ клиенту... и HTML слать я тебе советую из фаила - проще будет разобраться, считывай фаил HTML из фаила и шли его.... А вообще если будет тебе не сложно то можно почитать исходные коды сервера Apache |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |