Сервер - статьи

       

С чего начать


Начнем мы, как всегда, с запуска нашего Delphi. После появления формы перебросим из палитры компонентов TIdHTTPServer (который, по большому счету, и будет выполнять за нас всю грязную работу по соединению с клиентом и общению с ним). Нам же останется лишь переадресовывать запросы клиента на соответствующие файлы. Кроме того, я порекомендовал бы также перетащить на форму еще и TButton. И в его реакции на нажатие написать код запуска нашего сервера:

procedure TForm1.Button1Click (Sender: TObject); begin Self.IdHTTPServer1.Active:=True; end; , а в событие Form1.OnDestroy (): procedure TForm1.FormDestroy (Sender: TObject); begin Self.IdHTTPServer1.Active:=False; end;

Теперь поподробнее рассмотрим событие idHTTPServer.OnCommandGet, которое имеет тип:

TIdHTTPGetEvent = procedure (AThread: TIdPeerThread; RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo) of object;

Где:

  • AThread - поток, который содержит информацию о подключении;
  • параметр RequestInfo содержит информацию о запрашиваемых данных;
  • ResponseInfo используется для передачи результата выполнения запроса.

Для проверки работоспособности нашего сервера создадим файл (Response.txt) примерно следующего содержания:

<html>

<head> <title>Testing</title> </head> <body> <h1>This is the test</h1> </body> </html>

А в обработчике события idHTTPServer1.OnCommandGet напишем такой код:

ResponseInfo.ContentStream:=TFileStream.Create ('D:\Response.txt',fmOpenRead);

Настройка браузера предельно проста - нужно всего лишь указать в настройках прокси-сервера название компьютера, на котором находится сервер, и соответствующий порт (я использую 800-й).

После запуска сервера открываем наш уже настроенный браузер и набираем любой адрес. В результате мы должны получить то, что было написано в файле Response.txt. Но это нам мало что дает - какой бы адрес мы ни использовали, результат будет одним и тем же. Для получения чего-то более похожего на веб-сервер нужна небольшая доработка:

if RequestInfo.Host='www.test.com' then begin ResponseInfo.ContentStream:=TFileStream.Create ( 'D:\Projects\HTMLProjects\MySite\' +RequestInfo.Document,fmOpenRead); end;

Что мы здесь делаем:

  • во-первых, проверяем, какой хост запрашивает клиент;
  • если это www.test.com, то переадресовываем запрос на соответствующий файл, содержащийся в каталоге с полной копией нашего сайта (D:\Projects\HTMLProjects\MySite);
  • посылаем результат клиенту.

Теперь, если в поле браузера ввести строку www.test.com/index.html, мы увидим начальную страницу (если она называется index.html) нашего сайта - со всеми ссылками, рисунками, скриптами и аплетами.



Содержание раздела