> Правильно, и не будут читаться. И коннекта у тебя нет (с > чего ты взял, что есть?) > Указатель - это просто адрес в памяти, и если ты по этому > адресу не создашь объект перед разыменованием указателя, > последствия могут быть самые разные - от игнорирования > твоих действий то выпадания программы в общую ошибку > защиты. Запись some_class *obj; > всего лишь объявляет указатель, который указывает куда > угодно и уж скорее всего не на нужный тебе объект, который > ты все равно не создал (и никто за тебя тоже не создал). > > Короче, если не хочется вникать в программирование на C++, > можешь последовать совету Killer'а и добавить > соответствующий компонент на форму. Заодно и удалять этот > объект не понадобится. Но вообще подобная работа с > объектами - это уже Delphi, а не C++.
С чето ты взял, что нет коннекта? http->Conrcted - тип BOOL. Не веришь, проверь... Кенект подтверждается! Память выделять под указатель пробовал, выдаёт ошибку.
P.S: На С++ пишу уже 3 года!
Работая в VC с HTTP я пользовал класс CInternetSession - очень удобнаый класс, прост в ображении и неприхотлив :). Теперь програмка пишется на Билдере. Покапавшись в его стандартных компанентах я не нашёл ничего похожего, может плохо искал. Если кто работал с НТТР протоколом на Билдере поделитесь опытом. Как работать с пересылкой файлов по НТТР протоколу?
Спасибо.
[C++] Builder и HTTP...28.09.03 11:37 Автор: ynblpb Статус: Незарегистрированный пользователь
> Работая в VC с HTTP я пользовал класс CInternetSession - > очень удобнаый класс, прост в ображении и неприхотлив :). > Теперь програмка пишется на Билдере. Покапавшись в его > стандартных компанентах я не нашёл ничего похожего, может > плохо искал. Если кто работал с НТТР протоколом на Билдере > поделитесь опытом. Как работать с пересылкой файлов по НТТР > протоколу? > Спасибо.
А не пробовал юзать WINAPI SOCKET send recv и т п? В принципе в MSDN довольно хорошо описано.
Да не вопрос... начиная от tnmhttp и tidhttp и заканчивая апи (msdn-internetopen и далее)28.09.03 00:41 Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 28.09.03 01:33 Количество правок: 1
Создаю TNMHTTP* ht,
ht->host = "microsoft.com"
ht->Port = 80;
ht->Connect();
AnsiString str = "";
str = ht->Read(100);
Смотрю, что в str, а там пусто!!!! Может, что ни так делаю?(я НЕ из под прокси сижу!)
> Создаю TNMHTTP* ht, > ht->host = "microsoft.com" > ht->Port = 80; > ht->Connect(); > AnsiString str = ""; > str = ht->Read(100); > Смотрю, что в str, а там пусто!!!! Может, что ни так > делаю?(я НЕ из под прокси сижу!) делай так
Создаю TNMHTTP* ht,
// А создаешь ты его так - TNMHTTP* ht=new TNMHTTP()? Кстати самому создавать совсем необязательно - можно при дизайне кинуть на форму этот компонент он лежит на палитре на закладке FastNet
ht->Get("http://microsoft.com");
Вешаем обработчик на OnSuccess и в нем делаем следующее
if(Cmd==CmdGET)
{
AnsiString xxx=ht->Body;
//все... радуемся жизни.
//никаких Connect И тп - это все делается автоматом при Get
//TNMHTTP не умеет выполнять несколько команд за раз. Я это лечил выстраиванием команд в очередь и последовательным испольнением иначе вылетает с исключением AlreadyConnected
}
> ht->host = "microsoft.com" > ht->Port = 80; > ht->Connect(); > AnsiString str = ""; > str = ht->Read(100); > Смотрю, что в str, а там пусто!!!! Может, что ни так > делаю?(я НЕ из под прокси сижу!)
> > Создаю TNMHTTP* ht, > > а здесь никакого new не надо? > > > ht->host = "microsoft.com" > > ht->Port = 80; > > ht->Connect(); > > AnsiString str = ""; > > str = ht->Read(100); > > Смотрю, что в str, а там пусто!!!! Может, что ни так > > делаю?(я НЕ из под прокси сижу!) Это же компонент билдера, сколько с ним(билдерам) работаю он всегда работал без выделения памяти!
> > > делаю?(я НЕ из под прокси сижу!) > Это же компонент билдера, сколько с ним(билдерам) работаю > он всегда работал без выделения памяти! это если компоненты кидать на форму то ниче не надо выделять т.кю все выделяется ри этом при создании окна. А можно и лучше (быстрее работает) создавать в рантайме динамически через new.
> > > Создаю TNMHTTP* ht, > > > > а здесь никакого new не надо? > > > Это же компонент билдера, сколько с ним(билдерам) работаю > он всегда работал без выделения памяти! Это не компонент билдера, это указатель на него. Чудес не бывает, ищи то, что тебе создаст сам объект либо создавай сам.
> > > > Создаю TNMHTTP* ht, > > > > > > а здесь никакого new не надо? > > > > > Это же компонент билдера, сколько с ним(билдерам) > работаю > > он всегда работал без выделения памяти! > Это не компонент билдера, это > указатель на него. Чудес не бывает, ищи > то, что тебе создаст сам объект либо создавай сам. Пусть даже и так, проблема не в том, что нет коннекто, он как раз есть, проблемма в том, что данные не читаются! ХОТЬ это И НЕ компонент, а указатель на него.
Tnmhttp30.09.03 15:02 Автор: amirul <Serge> Статус: The Elderman
> > Это не компонент билдера, это > > указатель на него. Чудес не бывает, > ищи > > то, что тебе создаст сам объект либо создавай сам. > Пусть даже и так, проблема не в том, что нет коннекто, он > как раз есть, проблемма в том, что данные не читаются! ХОТЬ > это И НЕ компонент, а указатель на него. Все правильно тебе говорят. Ты создаешь объект <указатель> - он создается и инициализируется чем то там своим (нулем этого типа, но не обязательно).
Если не хочешь кидать на форму - то дался тебе этот указатель. Делай объект локальным, глобальным, статическим - каким угодно и обращайся непосредственно к полям (оператор точка, а не стрелка). В этом случае реализация должна сама проследить, чтобы память под объект выделилась, а сам объект проинициализировался, а при выходе из области видимости - очистился:
> TNMHTTP ht; ^^^^^^^вот тут билдер при компиляции выругается и скажет что VCL classes must be созданы с помощью оператора new. Не может он иначе. Совсем не может Ж).
> ht.host = "microsoft.com" ; > ht.Port = 80; > ht.Connect(); > AnsiString str = ""; > str = ht.Read(100); >
Не знал. Бильдером не пользуюсь :-)01.10.03 15:01 Автор: amirul <Serge> Статус: The Elderman
> > TNMHTTP ht; > ^^^^^^^вот тут билдер при компиляции выругается и скажет > что VCL classes must be созданы с помощью оператора new. Не > может он иначе. Совсем не может Ж). Странный он. Ну какая ему разница где выделять память.
> Странный он. Ну какая ему разница где выделять память. Клонироваться, например, можно только в динамическую память. Десериализоваться в автоматическую/статическую память тоже натужно. В чем-то его понять можно.
Да нечем у тебя читать данные!30.09.03 14:15 Автор: Ktirf <Æ Rusakov> Статус: Elderman
> Пусть даже и так, проблема не в том, что нет коннекто, он > как раз есть, проблемма в том, что данные не читаются! ХОТЬ > это И НЕ компонент, а указатель на него. Правильно, и не будут читаться. И коннекта у тебя нет (с чего ты взял, что есть?)
Указатель - это просто адрес в памяти, и если ты по этому адресу не создашь объект перед разыменованием указателя, последствия могут быть самые разные - от игнорирования твоих действий то выпадания программы в общую ошибку защиты. Запись some_class *obj; всего лишь объявляет указатель, который указывает куда угодно и уж скорее всего не на нужный тебе объект, который ты все равно не создал (и никто за тебя тоже не создал).
Короче, если не хочется вникать в программирование на C++, можешь последовать совету Killer'а и добавить соответствующий компонент на форму. Заодно и удалять этот объект не понадобится. Но вообще подобная работа с объектами - это уже Delphi, а не C++.
Да нечем у тебя читать данные!30.09.03 15:44 Автор: CrazyPitbull Статус: Незарегистрированный пользователь
> Правильно, и не будут читаться. И коннекта у тебя нет (с > чего ты взял, что есть?) > Указатель - это просто адрес в памяти, и если ты по этому > адресу не создашь объект перед разыменованием указателя, > последствия могут быть самые разные - от игнорирования > твоих действий то выпадания программы в общую ошибку > защиты. Запись some_class *obj; > всего лишь объявляет указатель, который указывает куда > угодно и уж скорее всего не на нужный тебе объект, который > ты все равно не создал (и никто за тебя тоже не создал). > > Короче, если не хочется вникать в программирование на C++, > можешь последовать совету Killer'а и добавить > соответствующий компонент на форму. Заодно и удалять этот > объект не понадобится. Но вообще подобная работа с > объектами - это уже Delphi, а не C++.
С чето ты взял, что нет коннекта? http->Conrcted - тип BOOL. Не веришь, проверь... Кенект подтверждается! Память выделять под указатель пробовал, выдаёт ошибку.
P.S: На С++ пишу уже 3 года!
еще раз повторяю - юзай метод tnmhttp::get()30.09.03 23:18 Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 30.09.03 23:32 Количество правок: 3
потому что ::connect и ::read это унаследованные от TPowersock и никакого отношения к HTTP они не имеют. connect подключаеьтся к порту 80 и больше ниче не делает а read просто читает raw данные по tcp протоколу есдли такие имеются в сокете естественно не отсылая никаких HTTP запросов - TPowersock ниче не знает про HTTP. Юзай только те методы которые относятся непосредственно к TNMHTTP - Get и Post. Работают они асинхронно с твоей прогой потому результаты команд обрабатывай в событиях. И конектсятся к серверу сами.
> С чето ты взял, что нет коннекта? http->Conrcted - тип > BOOL. Не веришь, проверь... Кенект подтверждается! Память > выделять под указатель пробовал, выдаёт ошибку. Пересмотрел весь тред и не нашел кода, который создает объект. Будь добр, вместо "Создаю TNMHTTP *ht;" напиши, как именно ты его создаешь.
> P.S: На С++ пишу уже 3 года! Я десять, ничего? Дело не в этом :)
Чудес не бывает, если есть указатель на объект, значит этот объект где-то должен быть создан, будь-то конструктор формы или запись new TNMHTTP;. Если конструктор формы - компонент должен быть добавлен к форме. Прошу не обижаться, я честно хочу помочь.
Да нечем у тебя читать данные!30.09.03 15:56 Автор: whiletrue <Роман> Статус: Elderman
Хочу сказать всем большое спасибо, проблемма оказалась не в том, что я работаю с указателем, здесь всё корректно конектится, как правильно указал Killer{R} конект происходит по TCP. Удобный метод TNMHTTP::Get(AnsiString Url), решил все проблеммы, без проблемм читает данные. Ещё раз всем спасибо, в особенности Killer{R}'y.