Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Вниз

Как подгружать картинки в страницу, которую генерит TСPServer?   Найти похожие ветки 

 
arche   (2003-10-27 09:25) [0]

Я создал простой сервер на TTCPServer, который у меня нормально отдает HTML документ, но есть такая проблема: как подгружать в этот документ картинки и т.п., т.е. где надо указать путь ассоциированный с localhost, откуда эти картинки бы подгружались?


 
Reindeer Moss Eater   (2003-10-27 09:29) [1]

В html код вклей ссылку на картинку.


 
arche   (2003-10-27 09:39) [2]

мне нужно чтобы код в html был такой (без C:\ или file:///C:/):

<img src="/img/picture.gif" />

т.е. как в программе прописать этот "корень", откуда будет все грузиться?


 
Reindeer Moss Eater   (2003-10-27 09:41) [3]

Странный ты.
Сервер - твой.
Где картинки лежат - знаешь.
А какой путь прописать - спрашиваешь на форуме.


 
arche   (2003-10-27 09:55) [4]

Весь html документ я отдаю вручную, т.е. примерно так:
ClientSocket.SendLn("HTTP 1/1 .. и т.п. ..)
...
ClientSocket.SendLn("<html><img src=/img/pic.gif /></html>");
..

Так откуда этот путь (/img/pic.gif) будет читаться на компе?


 
Anatoly Podgoretsky   (2003-10-27 09:58) [5]

Из текущего root для страницы


 
Reindeer Moss Eater   (2003-10-27 10:00) [6]

Клиент увидев такую ссылку, запросит у твоего сервера документ pic.gif из подкаталога img


 
arche   (2003-10-27 10:06) [7]

Так а как мне етот root определить???
Страницы-то самой физически не существует!!
Я же отсылаю клиенту только текст, который генерится в памяти из БД.


 
Reindeer Moss Eater   (2003-10-27 10:09) [8]

А зачем такую ссылку в html для клиента делаешь?


 
Reindeer Moss Eater   (2003-10-27 10:09) [9]

И где наконец находятся файлы рисунков?


 
Reindeer Moss Eater   (2003-10-27 10:14) [10]

Так откуда этот путь (/img/pic.gif) будет читаться на компе?

Этот путь придет обратно с клиента на сервер (если браузер клиента закачивает картинки).

И серверу никто не мешает отдать картинку из
/img/pic.gif
или
"/совсем другой каталог/pic.gif"


 
arche   (2003-10-27 10:18) [11]

Ну так мне самому и нужно узнать куда класть рисунки, т.е. где программно прописать root, к которому клиенту за рисунком лезть?
т.е. как прописать этот Root?
Как это делают все обычные сервера? Мы прописываем в конфиге путь к рутовой директории, а в html документе пишем уже путь от этого корня.
Так как и где для моего случая программно прописать этот путь к корню (к какой-нить определенной папке на диске)?


 
Reindeer Moss Eater   (2003-10-27 10:22) [12]

Ну так мне самому и нужно узнать куда класть рисунки
Где удобно, туда и складывай.
Что бы работало без дополнительной обработки путей - устанавливай текущий каталог для процесса веб-сервера и пляши от него.


 
arche   (2003-10-27 10:27) [13]

устанавливай текущий каталог для процесса веб-сервера

А как и где его установить? Вот в чем суть вопроса.


 
Reindeer Moss Eater   (2003-10-27 10:37) [14]

Это не суть вопроса.
Это твое желание и больше ничего.
Не хочешь устанавливать - используй каталог из которого запущен веб-сервер


 
Reindeer Moss Eater   (2003-10-27 10:40) [15]

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


 
arche   (2003-10-27 10:56) [16]

1. Ты сказал:
устанавливай текущий каталог для процесса веб-сервера

После чего я задал тебе конкретный вопрос:
А как и где его установить?

Мне нужен ответ на этот вопрос.

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

Ладно, допустим я ничего не понимаю. Тогда пожалуйста популярно объясни, как эта картинка в итоге попадает в браузер клиента?


 
Reindeer Moss Eater   (2003-10-27 11:01) [17]

А как и где его установить?

Как - SetCurrentDir
Где - в коде твоего веб сервера. Например сразу после его запуска.


 
Gawk   (2003-10-27 11:01) [18]


> А как и где его установить? Вот в чем суть вопроса.

function SetCurrentDir(const Dir: string): Boolean;


 
arche   (2003-10-27 11:18) [19]

Спасибо, это все, что я хотел узнать, вечером поэкспериментирую.


 
arche   (2003-10-28 20:24) [20]

А вот и не работает нифига... :(
Пишу значит:


if SetCurrentDir("F:\") then
...
else
ShowMessage("Can`t set current directory!");
end;


ну типа директория устанавливается, а картинка не показывается,
а путь к картинке такой: "F:\a.gif"
А html код для картинки: <img src="a.gif"/>
и не показывается. Что делать?


 
Reindeer Moss Eater   (2003-10-29 09:05) [21]

ну типа директория устанавливается, а картинка не показывается,

Если начать думать, то скоро станет ясно, что "картинка не показывается" - это из области проблем клиента, а не сервера (ибо сервер картинки не показывает, он их отдает по запросу клиента).

Ты же в настоящее время точишь код своего сервера.
Попробуй ответить на такой вопро:с "А браузер вообще-то запрашивал у сервера эту картинку?"


 
arche   (2003-10-29 09:11) [22]

to: Reindeer Moss Eater

Ты по-моему изначально не правильно меня понял.
дело в том, что если прописать полный путь к картинке так:

<img src="F:\a.gif" />

то картинка показывается!
Но я хочу, чтобы картинка показывалась при таком написании:

<img src="a.gif" />

Как это сделать?


 
Reindeer Moss Eater   (2003-10-29 09:22) [23]

Следи за движением руки:

Браузер запросил у твоего сервера некий URL.
Твой сервер составил HTML документ со ссылкой на GIF и отдал его клиенту.
Браузер клиента настроен на показ графики. Поэтому он извлекает из полученного документа ссылку и передает её твоему серверу(второй URL).
Процесс твоего сервер ищет в своем текущем каталоге файл "a.gif" и не находит.

Вопросы:
1. Почему сервер вписывает в HTML документ ссылку на файл, которую потом он сам же не может найти?

2. Что мешает твоему серверу обработать неправильную ссылку на файл и прочитать его оттуда, где он лежит на самом деле?


 
arche   (2003-10-29 09:43) [24]

Давай разбираться.
Я понимаю работу своего сервера так:

1. От клиента приходит запрос с хедерами:


HTTP 1/1 ..
...


и т.д.

2. Я в сервере обрабатываю URL, и отдаю клиенту html:


ClientSocket.SendLn("HTTP 1/1 200");
...
ClientSocket.SendLn("<html>.... </html>");
...


3. Больше я никаких дополнительных запросов к моему TCPServer от клиента не наблюдаю! (у меня все в лог пишется).

4. Где я ошибаюся? Клиент запрашивает картинку уже не от моего сервера что-ли? Как конкретно решить проблему?


 
Reindeer Moss Eater   (2003-10-29 09:58) [25]

Больше я никаких дополнительных запросов к моему TCPServer от клиента не наблюдаю!

Чего же ты хочешь?
Чтобы клиент получил картинку сервера, он её должен попросить у сервера.


 
arche   (2003-10-29 10:19) [26]

что за бред? Как я скажу Internet Explorer"у что бы он еще запросил и картинку?? Глупости..

Я же говорю, если прописать путь <img src="F:\a.gif" />, то все показывается! И ничего он не запрашивает и в явном виде и не должен запрашивать!

Кто-нибудь, помогите конкретным советом!


 
Reindeer Moss Eater   (2003-10-29 10:23) [27]

Тогда бред пишешь ты:

3. Больше я никаких дополнительных запросов к моему TCPServer от клиента не наблюдаю! (у меня все в лог пишется).


 
Reindeer Moss Eater   (2003-10-29 10:24) [28]

И ничего он не запрашивает и в явном виде и не должен запрашивать!

Не кури больше.


 
Reindeer Moss Eater   (2003-10-29 10:27) [29]

Вот тебе хороший совет:

Поймай момент прихода запроса от клиента на катинку
и выведи в лог содержимое текущего каталога в этот момент.


 
arche   (2003-10-29 10:35) [30]


> Поймай момент прихода запроса от клиента на катинку


Как поймать этот момент?
У сервера есть только эти события:

OnAccept
OnCreateHandle
OnDestroyHandle
OnGetThread
OnListening

У меня весь функционал прописан в OnAccept().
(Иногда возникает событие OnGetHandle, но я так и не понял, зачем оно и когда возникает :( )


 
Reindeer Moss Eater   (2003-10-29 10:39) [31]

OnCommandGet(AThread: TIdPeerThread; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);


 
arche   (2003-10-29 10:45) [32]

ну это в Indy компоненте.
А в моем случае (TTCPServer) этого сделать нельзя что-ли?


 
Reindeer Moss Eater   (2003-10-29 10:48) [33]

Стало быть ты руками реализуешь HTTP протокол?
Тогда вообще не понимаю твоего вопроса.
Все данные запросов клиента проходят через твои руки.


 
arche   (2003-10-29 10:54) [34]

Ну приходят ко мне заголовки и все.
что я там могу еще увидеть??


 
Reindeer Moss Eater   (2003-10-29 10:58) [35]

Вот когда пришел очередной заголовок и в нем просьба выдать файл a.gif вот тогда и выведи в лог содержимое текущего каталога сервера


 
arche   (2003-10-29 10:59) [36]

Да и заголовков этих приходит всего четыре что-ли..


 
Плохиш_   (2003-10-29 11:00) [37]

Блин детский сад какой-то :-(
И никто так и не догадался заглянуть в конфиг-файл веб-сервера :-(


 
Reindeer Moss Eater   (2003-10-29 11:03) [38]

Плохиш_
Сначала надо догадаться, что у его самописного веб-сервера вообще есть файл с конфигом


 
arche   (2003-10-29 11:04) [39]

В смысле эти заголовки приходят в одной пачке при запросе URL.
т.е. на событие OnAccept я начинаю принимать пакет заголовков:


HTTP 1/1 ..
Contnt-Type ..
..
Server ..


и ничего про запрос картинки нету :(

и все. больше ничего до запроса новой страницы не приходит.


 
arche   (2003-10-29 11:07) [40]


> Плохиш_
,

Какой конфиг? У меня запущен только мой TCPServer который ловит запросы и все.
и никаких там апачей с конфигами.



Страницы: 1 2 вся ветка

Форум: "Сети";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.009 c
14-86501
Карелин Артем
2003-12-04 14:33
2003.12.26
Что может висеть на 7000 порту?


11-86329
Ал
2003-04-10 14:04
2003.12.26
Как избежать увелич. шрифта в RichEdit, если в Win - крупный?


3-86242
Слэш
2003-12-04 11:48
2003.12.26
Как составить такой SQL запрос ?


6-86471
sapsi
2003-10-28 12:29
2003.12.26
Нахождение названий ссылок на HTML странице


3-86297
Vick
2003-12-01 18:53
2003.12.26
Файловые операции в MSSQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский