Помогите загрузить картинку в браузер ума не приложу в чём дело , ну никак не получается заставить браузер отобразить картинку.
В прилогаемой схеме эмуляция проксисервера.
code_9037.txt
Этот топик читают: Гость
Ответов: 893
Рейтинг: 18
|
|||
карма: 0 |
| ||
файлы: 1 | code_9037.txt [2.7KB] [188] |
Ответов: 2125
Рейтинг: 159
|
|||
А ты уверен, что складывать бинарные данные в список строк, а потом выдавать это за картинку - это правильно?
Как минимум, будут добавлены символы посреди бинарных данных, а если в данных нули будут, то после первого нуля данные обрежутся. Надо складывать в MemoryStream. Если у тебя соединение через прокси, то надо коннектиться к нему. А если ты коннектишься сразу к hiasm.com, то не надо писать GET http://hiasm.com/small.png, надо писать сразу GET /small.png. Прокси-сервер выкусывает из запроса имя протокола и сайта, и коннектится к выкушенному сайту "hiasm.com" по выкушенному протоколу "http" ![]() |
|||
карма: 1 |
|
Ответов: 893
Рейтинг: 18
|
|||
tsdima писал(а): А если ты коннектишься сразу к hiasm.com, то не надо писать GET http://hiasm.com/small.png, надо писать сразу GET /small.png.Так браузер написал , я и скопировал весь запрос. А насчёт бинарного кода я считал что там текст а не бинарный код , так как быть с картинкой то ? |
|||
карма: 0 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Byuik писал(а): Так браузер написал , я и скопировал весь запрос.Правильно, ты ж наверное свою прогу ему как прокси подсунул, вот он к твоей проге как к прокси и обращается. Byuik писал(а): А насчёт бинарного кода я считал что там текст а не бинарный код , так как быть с картинкой то ?Сначала текст (заголовок ответа), а после пустой строки - бинарные данные (картинка). Но тебе должно быть всё равно, ты должен 1-в-1 ответ браузеру передать. |
|||
карма: 1 |
|
Ответов: 893
Рейтинг: 18
|
|||
tsdima писал(а): Но тебе должно быть всё равно, ты должен 1-в-1 ответ браузеру передать.Та значит нужно отделить бинарные данные от текстовых , передать заголовок , а потом откодировать бинарные данные в текст и отправить их ? тогда поставим вопрос по другому: Как отделить бинарные данные от текстовых , стандартными компонентами ? |
|||
карма: 0 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Byuik писал(а): Та значит нужно отделить бинарные данные от текстовых , передать заголовок , а потом откодировать бинарные данные в текст и отправить их ?ЗАЧЕМ? То, что ты получишь в ответ от hiasm.com нужно без изменений передать твоему браузеру, просто соедени точки onRead --- doSend. |
|||
карма: 1 |
|
Ответов: 893
Рейтинг: 18
|
|||
tsdima писал(а): просто соедени точки onRead --- doSend.Уже соединял и ничего хорошего не вышло так как текстовые данные пересылаются без проблем а вот картинки нет ![]() вот пример code_2224.txt [size=-2]------ Добавлено в 19:49 Так чтоже делать то ? ------------ Дoбавленo: Вот последний вариант схемы
|
|||
карма: 0 |
| ||
файлы: 1 | code_2224.txt [2.5KB] [162] |
Ответов: 2125
Рейтинг: 159
|
|||
Byuik писал(а): Уже соединял и ничего хорошего не вышло Вполне возможно, что у тебя не последняя версия hiTCP_Client.pas, возьми с SVN http://hiasm.googlecode.com/svn/elements/delphi/code/hiTCP_Client.pas Я пару месяцев назад делал изменение, чтобы строки с нулями посередине не обрезались в onRead. doSend не обрезает стопудово. ------------ Дoбавленo: Тебе чего, в конечном итоге, сделать-то надо? Прокси сервер? |
|||
карма: 1 |
|
Ответов: 893
Рейтинг: 18
|
|||
tsdima писал(а): Тебе чего, в конечном итоге, сделать-то надо? Прокси сервер?да именно прокси сервер ток не говори что есть компонент такой он мне не подходит так как он малофункционален. |
|||
карма: 0 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Вобщем, я незнаю, что у тебя там не так, но у меня вот эта схема:
------------ Дoбавленo: Ты вообще в курсе, что TCP_Server подходит только для чата, и то не всегда? Нормальный сервер работает с каждым клиентом по-отдельности, как TCP_ServerEx. Браузер обычно открывает несколько соединений, чтобы грузить файлы/картинки/css, присутствующие на странице, параллельно. В случае с TCP_Server браузер получит кашу из всего этого в каждом соединении. |
|||
карма: 1 |
| ||
Голосовали: | Ghost_Russia |
Ответов: 893
Рейтинг: 18
|
|||
tsdima писал(а): Ты вообще в курсе, что TCP_Server подходит только для чата, и то не всегда?Конечно ![]() Просто мне пришлось упростить схему для того чтоб был понятен смысл выполняемых действий для решения задачи. Кстати , твоя схема не работает с рисунками , а то что у тебя загрузилось я подозреваю это был кеш. Даже постле замены исходного кода TCPclient |
|||
карма: 0 |
|
Ответов: 893
Рейтинг: 18
|
|||
В hiasm есть штатный пример WEB сервера в котором явно показано как файл передают браузеру предварительно отконвертировав в текст и добавив ему необходимые заголовки.
code_2225.txt Так вот проделав все необходимые операции я так и не смог конвертировать файл принятый TCPclient в исходное состояние , поэтому я делаю предположение что TCPclient возвращает не тот результат который нужен. |
|||
карма: 0 |
| ||
файлы: 1 | code_2225.txt [752B] [219] |
Ответов: 893
Рейтинг: 18
|
|||
Есть предложение , почему бы нам не рассмотреть следующий вариант :
1. Принять ответ http сервера на TCPclient разбить его на две части 1заголовок 2данные 2. Далее часть 2 (данные) преобразовать обратно в файл . Но я не смог выполнить пункт номер 2 поскольку незнаю как обработать эту часть данных таким образом чтоб превратить это в исходный файл отправляемый http сервером , кстати скорее всего браузер тоже попадает в тупик получая такие данные. |
|||
карма: 0 |
|
Ответов: 2125
Рейтинг: 159
|
|||
Byuik писал(а): В hiasm есть штатный пример WEB сервера в котором явно показано как файл передают браузеру предварительно отконвертировав в текстВ этом примере я сделал так, потому что использовать тип данных "поток" не представляется возможным (компонент передаёт сначала длинну в бинарном виде, а затем содержимое потока). То есть единственный тип данных, с которым можно работать нормально - это String. Byuik писал(а): 1. Принять ответ http сервера на TCPclient разбить его на две части 1заголовок 2данные
2. Далее часть 2 (данные) преобразовать обратно в файл Браузер справляется с этими задачами гораздо лучше. Вообще-то, у меня своя реализация TCP.pas, но та версия, что вместе с Хиасмом идёт, тоже вроде нормально работала. Я как-то публиковал тут свою версию, но тогда она была с ошибкой. Ты случайно не экспериментировал с ней? На всякий случай, сравни свой TCP.pas с тем, что на SVN. |
|||
карма: 1 |
|
Ответов: 893
Рейтинг: 18
|
|||
tsdima писал(а): Ты случайно не экспериментировал с ней?Нет tsdima писал(а): На всякий случай, сравни свой TCP.pas с тем, что на SVNОдин к одному ![]() tsdima писал(а): Браузер справляется с этими задачами гораздо лучше.А почемубы тебе не проделать то что я описал выше , ведь этож 3 минутки дела , или возьми готовый пример что я зделал , последний там уже всё разделено ![]() А я смею предположить что естли их вообще обработать нельзя никак кроме как текст то значит там повреждённые данные и повреждены TCPClient ом ![]() |
|||
карма: 0 |
|