Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TClientSocket - Browser


LLOyD ©   (2003-08-16 03:03:00) 

Здравствуйте Delphi-кодеры !!!

Создаю клиент-сокет:
Имя хоста что-то типа: www.ya.ru
Номер порта: 80 (HTTP)
ClientSocket1.Open; - все работает.
Внимание ВОПРОС:
Че мне теперь делать? Сервер молчит =(.
Жду ответа так:

procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var Buffer : array [0..65535] of byte; {Вроде бы HTTP-пакет
не более 4096 байт?}
begin
...
Size := ClientSocket1.Socket.ReceiveLength;
ClientSocket1.Socket.ReceiveBuf( Buffer, Size );
...
end;

Разве при коннекте сервер не должен хоть как-нибудь
уведомить клиента, что коннект состоялся или что-вроде того?

Пробовал запросы посылать:
POST http://www.ya.ru/HTTP/1.0
Connection: Keep-Alive
Host: www.ya.ru и т.д. и т.п.

Все равно молчит. Написал подобное во Flash"е.
Такая же история. Подскажите как заставить сервер
хоть байт мне переслать, уж очень хочется браузер написать
именно используя TClientSocket.


LLOyD   (2003-08-18 18:50:00) [1]

2SergP
Я тоже читал примерно следующее
HTTP/1.0 связь после по-умолчанию прерывается
если в заголовке запроса клиента не содержится строка
Connection: Keep-Alive
но она у меня почему-то не работает...
HTTP/1.1 в принципе не должен прерывать связь

2Beginer1 & 2All
Мои основные ошибки:
1. Даже если метод GET, HEAD и т.п. все равно должна присутствовать пустая строка после заголовка.
2. Поля заголовка отделяются не CRLF - #13#10,
а просто #10 (Unix-система?).


SergP   (2003-08-18 18:21:00) [2]


> Beginer1 © (18.08.03 08:27) [12]
> >Получилось !!! Только почему после первого
> >запроса-ответа связь прерывается ? Это что
> >спецификация HTTP ?


Вроде бы не всегда... Где-то читал что это зависит от того HTTP1.0 или HTTP1.1


nikkie   (2003-08-18 15:19:00) [3]

>Это что спецификация HTTP ?
да


Digitman   (2003-08-18 09:08:00) [4]


> И еще: сразу после коннекта
> вызывается onWrite.


Что ж странного в этом ? Так и должно быть !
Для асинхр.режима только факт возникновения события OnWrite() дает "зеленый свет" вызову любых методов передачи данных. И не иначе.


Beginer1   (2003-08-18 08:27:00) [5]

>Получилось !!! Только почему после первого
>запроса-ответа связь прерывается ? Это что
>спецификация HTTP ?

http://www.itunion.ru/doc/?/net/http/http

после запроса GET по спецификации HTTP нужно передавоть пустую строку

(chr(10)+chr(13))


Beginer1   (2003-08-18 08:26:00) [6]

>Получилось !!! Только почему после первого
>запроса-ответа связь прерывается ? Это что
>спецификация HTTP ?

http://www.itunion.ru/doc/?/net/http/http

после запроса GET по спецификации HTTP нужно передавоть пустую строку примерно так

попробуй вот так

procedure TForm1.Button1Click(Sender: TObject);
begin
{


Beginer1   (2003-08-18 08:25:00) [7]

>Получилось !!! Только почему после первого
>запроса-ответа связь прерывается ? Это что
>спецификация HTTP ?

http://www.itunion.ru/doc/?/net/http/http

после запроса GET по спецификации HTTP нужно передавоть пустую строку примерно так

попробуй вот так

procedure TForm1.Button1Click(Sender: TObject);
begin
{


LLOyD   (2003-08-18 06:34:00) [8]

2LLOyD
Connection: Keep Alive
Пить надо меньше !!!


LLOyD   (2003-08-18 05:25:00) [9]

Получилось !!! Только почему после первого
запроса-ответа связь прерывается ? Это что
спецификация HTTP ?


LLOyD   (2003-08-18 02:58:00) [10]

2verg

> Потренируйся telnet-ом

Как с ним работать ? Open - выдает всегда что не
может соединиться, напиши если не трудно пример
коннекта telnet-ом.


> Начни с простого, с запроса GET

И его пробовал - не получается. И еще: сразу после коннекта
вызывается onWrite.


Beginer1   (2003-08-17 21:31:00) [11]

а можно премер как можно при помоши этого загрузить страницу
в виде html


Verg   (2003-08-17 11:36:00) [12]

Кстати,
> nikkie ©
прав. Если ты читал про http, то должен знать что любой запрос состоит из двух частей: заголовок(header) и содержимое (content). Эти две части разделяются пустой строкой.


Verg   (2003-08-17 11:31:00) [13]


> Разве при коннекте сервер не должен хоть как-нибудь
> уведомить клиента, что коннект состоялся или что-вроде того?


Нет не должен.

http - это такой протокол, что клиент сам должен начать "разговор". В отличии от, например, smtp или pop3.

Начни с простого, с запроса GET.
Потренируйся telnet-ом.


nikkie   (2003-08-16 13:42:00) [14]

>Пробовал запросы посылать:
добавь в конце лишний перевод строки


LLOyD   (2003-08-16 04:22:00) [15]

2SergP

В том то и вопрос: OnConnect сработал нормально.
OnRead не вызывается НИ РАЗУ !


SergP   (2003-08-16 04:05:00) [16]


> Разве при коннекте сервер не должен хоть как-нибудь
> уведомить клиента, что коннект состоялся или что-вроде того?
>
> Пробовал запросы посылать:
> POST http://www.ya.ru/HTTP/1.0
> Connection: Keep-Alive
> Host: www.ya.ru и т.д. и т.п.


А как ты посылаешь запросы если не коннект не произошел?
OnConnect у тебя срабатывает или нет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо