Delphi i PHP.pdf

(516 KB) Pobierz
3334018 UNPDF
Technika
Delphi i PHP
Komunikacja
Pomiędzy Delphi i PHP można stworzyć własne aplikacje do komunikacji
pomiędzy tymi językami. Służy do tego metoda POST.
Dowiesz się...
• W jaki sposób odebrać dane ze skryptu.
• W jaki sposób wysłać dane do skryptu.
Powinieneś wiedzieć...
• Powinieneś znać podstawy języka i środowi-
ska Delphi.
• Powinieneś znać podstawy języka PHP i HTML.
• Powinieneś znać podstawowe pojęcia związa-
ne z protokołem http.
Jak pamiętamy, dane przesyłane metodą POST
mają postać:
pole1=wartość&pole2=wartość2.
Dlatego musimy je przesłać w taki sposób.
Nazwy pól: „text1” i „text2” są nazwami przy-
kładowymi, które następnie zastosujemy
w skrypcie odbierającym dane. Należy pamię-
tać, że będą one różne dla każdej strony, która
odbiera pakiety z danymi.
Powyższa linijka tworzy ciąg powstały z po-
łączenia tekstu w cudzysłowie, z tekstem wpi-
sanym w Edit2 i Edit3 . Owy ciąg jest następ-
nie wysyłany do skryptu za pomocą funkcji
POST komponentu IdHTTP . Ostatnim kro-
kiem będzie zapisanie i skompilowanie nasze-
go projektu.
Gdy mamy już gotową aplikację, może-
my stworzyć najprostszy plik PHP, który po-
służy nam do jej testowania. Propozycja ko-
du znajduje się na Listingu 3. W skrypcie,
dla ułatwienia, zostały zastosowane zmien-
ne o takich samych nazwach, jak w naszym
programie.
Po zapisaniu pliku PHP i umieszczeniu go
na serwerze, uruchamiamy naszą aplikację, po-
dajemy odpowiednie parametry i naciskamy
przycisk POST . Pole tekstowe „Memo” podpisa-
ne jako „Kod wynikowy ” zostanie automatycz-
nie uzupełnione danymi zwróconymi przez
skrypt. Przedstawia to Rysunek 2.
Poziom trudności
niśmy im nadać, zostały zaprezentowane na
Rysunku 1.
Po umieszczeniu wszystkich elementów,
kliknijmy tylko raz na komponent IdHTTP
i przejdźmy do Object Inspector’a, a następ-
nie – odszukajmy listę Request . Po jej rozwinię-
ciu ukaże się nam kilka atrybutów, interesować
nas będzie ten o nazwie ContentType . W to pole
musimy wpisać ciąg:
S posób komunikacji, opiera się na meto-
application/x-www-form-urlencoded.
pole1=wartość&pole2=wartość2.
Tak więc: nazwa pola jest oddzielona od jego
wartości znakiem „=” , natomiast poszczególne
porcje danych oddziela znak „&” . Przykładowy
nagłówek z powyższymi informacjami wyglą-
dałby więc tak, jak na Listingu 1.
Więcej o kodowaniu danych możemy przeczy-
tać w ramce „Kodowanie danych”.
Pisanie kodu
Projektowanie aplikacji mamy już za sobą, czas
więc na napisanie kilku linijek kodu. Nasz pro-
gram będzie miał za zadanie:
Z Delphi do PHP
Zacznijmy projektować naszą aplikację, która
prześle dane do skryptu metodą POST . Uru-
chamiamy Delphi i z menu File wybieramy
New Application .
Po instalacji pakietu INDY w Delphi, przy-
będzie nam kilka nowych zakładek na pa-
lecie komponentów. Odszukajmy zakład-
Indy Clients i wybierzmy z niej kompo-
nent IdHTTP . To on umożliwi nam wysyła-
nie danych.
Umieścimy jeszcze następujące kompo-
nenty: 3x Edit , 4x Label , 1x Button , oraz 1x
Memo (wszystkie one znajdują się w zakład-
ce Standard ). Ich przykładowe rozmieszcze-
nie, a także właściwości Caption jakie powin-
• pobrać adres strony;
• pobrać dwie zmienne do wysłania;
• wysłać dane;
• odebrać kod wynikowy.
Jego lista zadań jest krótka. Dzięki zastoso-
waniu komponentu IdHTTP , kod również bę-
dzie krótki. Kliknijmy dwa razy na Button’ie
i wpiszmy kod, który znajduje się na Listingu 2.
Przyjrzyjmy się linijce odpowiadającej za
utworzenie strumienia StreamIn , a szczególnie
fragmentowi:
Listing 1. Przykładowy nagłówek z danymi
wysłanymi metodą POST
POST /i ndex . php HTT P/1 . 1
Host : www . domena . com
User - Agent : Mozill a/5 . 0
Content - Length : 28
Content - Type : applicatio n/x- www - form -
urlencoded
pole1 = warto ść& pole2 = warto ść 2
(Format('text1=%s&text2=%s', [Edit2.Text,Ed
it3.Text])).
26
06/2007
dzie POST , która umożliwia wysyłanie
danych przy pomocy nagłówków HTTP.
Dane przesyłane tą metodą mają postać:
3334018.040.png
 
3334018.041.png 3334018.042.png 3334018.001.png 3334018.002.png 3334018.003.png 3334018.004.png 3334018.005.png 3334018.006.png 3334018.007.png 3334018.008.png
Delphi i PHP
Listing 2. Wysyłanie danych z aplikacji do skryptu metodą POST
Przykładowe zastosowanie
Przykładowym zastosowaniem powyższej
metody komunikacji może być program, któ-
ry będzie uploadował wybrane obrazy z na-
szego dysku twardego na darmowy hosting
zdjęć ImageShack (dostępny pod adresem
www.imageshack.us ). Zaczniemy od małego
rekonesansu, tak więc otwieramy ową stro-
nę. Aby uniknąć żmudnej analizy kodu w
celu „wydobycia” szczegółów, skorzystajmy
z wtyczki do Firefox’a pod nazwą Web Develo-
per (link znajduje się w ramce „W Sieci”). Po-
siada ona funkcję, która modyfikuje wyświe-
tlaną stronę pokazując, na przykład, szcze-
góły formularzy. Zostało to pokazane na Ry-
sunku 3.
Co na nim widzimy? Po pierwsze – for-
mularz odwołuje się do strony głównej Ima-
geShack.us (fragment form action=”” ), po
drugie- format kodowania danych to multipart/
form-data (fragment enctype=”” ), i wreszcie po
trzecie- pole, z którego pobierana jest ścież-
ka do wysyłanego pliku (input name="fileuplo-
ad”) . Posiadając te informacje możemy rozpo-
cząć projektowanie aplikacji.
procedure TForm1 . Button1Click ( Sender : TObject );
var
StreamIn , StreamOut : TStringStream ;
begin
try
{Tworzymy strumień StreamIn zawierający łańcuch danych,
zostanie on potem wysłany do skryptu}
StreamIn := TStringStream . Create ( Format ( 'text1=%s&text2=%s' , [ Edit2 . Text , Edit3 . Text ]
));
{Tworzymy pusty strumień StreamOut. Będzie on odpowiedzialny
za odbiór kodu wynikowego skryptu}
StreamOut := TStringStream . Create ( '' );
{Procedura POST komponentu IdHTTP i jej kolejne parametry:
Adres URL, strumień z danymi, strumień odbierający}
IdHTTP1 . Post ( Edit1 . Text , StreamIn , StreamOut );
{Wyświetlamy kod wynikowy ze strumienia w Memo}
Memo1 . Lines . Text := StreamOut . DataString ;
inally
{Zwalniamy strumienie}
StreamIn . Free ;
StreamOut . Free ;
end ;
end ;
Listing 3. Odbieranie danych z aplikacji wysłanych metodą POST
<? php
$text1 = $_POST [ 'text1' ] ;
$text2 = $_POST [ 'text2' ] ;
echo "Zmienna \" text1 \" to: $text1 \n " ; //wyświetlamy zmienną „text1”
echo "Zmienna \" text2 \" to: $text2 \n " ; //wyświetlamy zmienną „text2”
?>
Przykładowa aplikacja
Zacznijmy od stworzenia nowego projek-
tu. Potrzebne nam będą komponenty: 1x
Edit , 1x Memo , 1x button , a także komponent
IdHTTP .
Podobnie jak ostatnio – kliknijmy raz na
komponent IdHTTP i przejdźmy do Object
Inspector’a , a następnie – odszukajmy li-
stę Request . Po jej rozwinięciu ukaże nam się
kilka atrybutów; interesować nas będzie ten
o nazwie ContentType . W to pole musimy wpi-
sać ciąg:
multipart/form-data.
Rysunek 3. Wtyczka Web Developer wyświetlająca szczegóły formularza na stronie ImageShack.us
Teraz, kliknijmy dwa razy na komponent But-
ton , i w edytorze kodu wpiszmy fragment
z Listingu 4. Jak widać została tam zawarta
zmienna MyData typu TIdMultiPartFormDa-
taStream . Jest to specyficzny typ strumienia
Rysunek 1. Przykładowe rozmieszczenie komponentów. Z lewej strony – komponenty ze standardowymi
właściwościami Caption, natomiast z prawej – komponenty posiadające zmodyikowaną tę właściwość
Rysunek 2. Gotowa aplikacja wysyłająca dane do
skryptu
www.phpsolmag.org
27
 
3334018.009.png 3334018.010.png 3334018.011.png 3334018.012.png 3334018.013.png 3334018.014.png 3334018.015.png 3334018.016.png 3334018.017.png
Technika
z danymi, którego implementacja konieczna
jest do wysłania danych, zakodowanych w for-
macie multipart/form-data . Aby z niego skorzy-
stać, konieczne jest dodanie do sekcji Uses mo-
dułu IdMultipartFormData . Jest on dołączony
do pakietu INDY . Po kompilacji projektu na-
leży w pole Edit wpisać ścieżkę obrazu, któ-
ry chcemy uploadować, a następnie nacisnąć
przycisk Button .
Zachęcam do przejrzenia kodów źródło-
wych, które zostały dołączone do płyty. Do
aplikacji dodałem również parser, który po-
biera z kodu wynikowego linki do naszego
obrazu, ale to temat na inny artykuł. Przy-
kład działania aplikacji pokazany jest na Ry-
sunku 4.
oraz 2x Memo (wszystkie one znajdują się w
zakładce Standard ). Ostatnio użyliśmy kom-
ponentu, który był klientem protokołu HTTP.
Pisząc tę aplikację, będziemy musieli stwo-
rzyć serwer HTTP. Odszukajmy więc zakład-
Indy Servers i wybierzmy z niej komponent
IdHTTPServer . Ich przykładowe rozmieszcze-
nie, a także właściwości Caption jakie powin-
niśmy im nadać, zostały zaprezentowane na
Rysunku 5.
OnClose naszej formy, wpiszemy ponownie
kod z Listingu 5. który tym razem jest opisa-
ny jako:
{Procedura OnClose}.
Główne zdarzenia zostały już napisane, czas
teraz na kod, który umożliwi odbieranie da-
nych. Klikamy na komponent IdHTTPServer1
i przechodzimy do Object Inspector. Odszu-
kujemy Event podpisany jako OnCommand-
Get i wpisujemy kod z Listingu 6.
Aplikacja jest już gotowa, możemy ją zapi-
sać i skompilować. Podobnie jak wcześniej,
stworzymy jeszcze plik PHP, z tym, że te-
raz to on będzie wysyłał dane do serwera.
W tym celu posłużymy się najprostszym for-
mularzem, którego propozycja kodu znajdu-
je się na Listingu 7. Pamiętajmy, że nasz pro-
gram działa na porcie 8008 (aby uniknąć ko-
lizji z innymi aplikacjami), więc będziemy
odwoływać się do niego w następujący spo-
sób http://AdresIP:NumerPortu , czyli http://
localhost:8008 .
Teraz musimy jeszcze uruchomić nasz pro-
gram i wypełnić pola formularza, a następnie
go zatwierdzić. Wynik działania aplikacji, która
odebrała parametry i zwróciła wynik do prze-
glądarki znajduje się na Rysunku 6.
Pisanie kodu
Przyszedł czas na oprogramowanie naszej apli-
kacji. Zacznijmy od aktywacji serwera- klikamy
na formie i odszukujemy właściwość OnCre-
ate na zakładce Events w oknie Object Inspector
i wpisujemy tam fragment kodu z Listingu 5.
podpisanego jako:
Z PHP do Delphi...
Teraz nadszedł czas na napisanie programu,
który będzie umożliwiał odbieranie zmien-
nych wysyłanych przez skrypt.
Stworzymy nową aplikację i na formie
umieścimy komponenty: 2x Label , 1x Edit
{Procedura OnCreate}.
Deaktywacja serwera odbywać się będzie pod-
czas zamykania programu, więc w zdarzenie
Listing 4. Wysyłanie danych z aplikacji do strony ImageShack
procedure TForm1 . Button1Click ( Sender : TObject );
var
MyData : TIdMultiPartFormDataStream ;
begin
{tworzymy specyiczny strumień z danymi}
MyData := TIdMultiPartFormDataStream . Create ;
try
{kolejny krok to dodanie do strumienia, metodą AddFile, kolejno:
nazwy pola (ileupload),ścieżki pliku, a także typu zawartości
pakietu z danymi(ile)}
MyData . AddFile ( 'ileupload' , Edit1 . Text , 'ile' );
{kod wynikowy zostanie wyświetlony w Memo1}
Memo1 . Lines . Text := IdHTTP1 . Post ( 'http://imageshack.us/' , MyData );
inally
{Zwalniamy strumień}
MyData . Free ;
end ;
end ;
Przykładowe zastosowanie
Powyższy sposób komunikacji może być wyko-
rzystany- np. do zdalnej administracji kompu-
terem poprzez stronę WWW.
Wg definicji serwera aplikacji jest to „pro-
gram działający na zdalnej maszynie obsługu-
jący żądania kierowane do aplikacji, do której
dostęp zapewnia. Użytkownik łączy się za po-
średnictwem przeglądarki internetowej, kieru-
je żądanie do wybranej aplikacji, a całość ope-
racji odbywa się po stronie komputera nale-
żącego do organizacji, która udostępnia daną
aplikację.” (pl.wikipedia.org). Zastanówmy się naj-
pierw nad ogólną koncepcją naszej aplika-
cji – zarówno klienta jak i serwera. Klient –
w tym przypadku strona WWW – powinien
zawierać pola: „Login” oraz „Hasło” , aby nasze-
go zdalnego systemu nie mogły przechwycić
Listing 5. Aktywacja i deaktywacja serwera IdHTTPServer1
{Procedura OnCreate}
procedure TForm1 . FormCreate ( Sender : TObject );
begin
{Ustawiamy numer portu dla serwera}
IdHTTPServer1 . DefaultPort := 8008 ;
{aktywujemy serwer}
IdHTTPServer1 . Active := True ;
end ;
{- - -}
{procedura OnClose}
procedure TForm1 . FormClose ( Sender : TObject ; var Action : TCloseAction );
begin
{dezaktywujemy serwer}
IdHTTPServer1 . Active := False ;
end ;
{- - -}
Kodowanie danych
Jeżeli chcemy wysłać dane do serwera za-
wierające elementy formularza, to muszą
one wcześniej zostać zakodowane. Kodo-
wanie application/x-www-form-urlencoded
jest kodowaniem domyślnym, które prze-
glądarka wysyła do skryptu; używamy go
do wysyłania małych ilości informacji. Nie
sprawdza się ono jednak podczas wysyła-
nia dużych ilości danych binarnych lub roz-
ległego tekstu. Do tego celu należy użyć ko-
dowania multipart/form-data .
Niezależnie od tego, na jakie kodowa-
nie się zdecydujemy, musimy pamiętać o je-
go implementacji w naszym programie.
28
06/2007
3334018.018.png
 
3334018.019.png 3334018.020.png 3334018.021.png 3334018.022.png 3334018.023.png 3334018.024.png 3334018.025.png
 
Delphi i PHP
niepowołane osoby, a także kilka opcji wybo-
ru, które będą reprezentowały możliwe do wy-
konania funkcje przez zdalny system. Po wy-
braniu opcji „Wyślij” , skrypt wyśle parametry
do aplikacji – serwera.
Serwer natomiast, po odbiorze porcji da-
nych, powinien mieć możliwość ich wali-
dacji, w tym danych użytkownika (jego na-
zwy oraz hasła), który chce skorzystać z jego
usług, a także oczywiście mieć możliwość wy-
konania żądanego polecenia. Po jego wykona-
niu serwer powinien zwrócić wynik, następ-
nie wszystkie operacje powinny być zapisywa-
ne w logach.
Listing 6. Odbieranie danych przez aplikację
procedure TForm1 . IdHTTPServer1CommandGet ( AThread : TIdPeerThread ;
ARequestInfo : TIdHTTPRequestInfo ; AResponseInfo : TIdHTTPResponseInfo );
var
StrResult : String ;
begin
{w Memo zostaną umieszczone żądania (request server)}
Memo1 . Lines . Add ( ARequestInfo . Document );
{tworzymy kod wynikowy dla przeglądarki}
StrResult := '<h1>Testowa strona serwera.</h1>'
+ '<b>Odebrane dane:</b>'
{ARequestInfo.Host zawiera informacje o hoście użytkownika...}
+ '<p>Host: ' + ARequestInfo . Host + '</p>'
{...natomiast ARequestInfo.UnparsedParams wyświetla parametry
przekazane do naszego serwera}
+ '<p>Parametry: ' + ARequestInfo . UnparsedParams + '</p>' ;
{wyświetlamy w przeglądarce stworzony łańcuch}
AResponseInfo . ContentText := StrResult ;
{do Edit1 dodajemy parametry przekazane do serwera}
Edit1 . Text := ARequestInfo . UnparsedParams ;
end ;
Listing 7. Formularz wysyłający zmienne metodą POST do aplikacji
Rysunek 4. Gotowa aplikacja wysyłająca
obrazy na hosting ImageShack.us i parsująca kod
wynikowy
< html >
<!--implementacja formularza: odwołuje się on do „http://localhost:8008” i przesyła
dane metodą „POST”-->
< form action= "http://localhost:8008" method= "post" >
< label for= "login" > Login: < /label >
< br / >
< input name= "login" type= "text" >
< br / >
< label for= "password" > Password: < /label >
< br / >
< input name= "password" type= "password" >
< br / >
< input value= "GO!" type= "submit" >
< /form >
< /html >
Rysunek 5. Przykładowe rozmieszczenie
komponentów. Z góry: komponenty
ze standardowymi właściwościami Caption,
natomiast u dołu: komponenty posiadające
zmodyikowaną tą właściwość
Listing 8. Przykładowa aplikacja klienta
< html >
< form action= "http://localhost:8008" method= "post" >
< label for= "login" >< b > Login < /b >< /label >
< br / >
< input name= "login" type= "text" value= "" style= "width: 300px" / >
< br / >
< label for= "pass" >< b > Hasło < /b >< /label >
< br / >
< input name= "pass" type= "text" value= "" style= "width: 300px" / >
< br / >
< label >< b > Polecenie < /b >< /label >
< br / >
< input type= "radio" name= "opcje" value= "shutdown" checked/ > Wyłącz zdalny komputer
< br / >
< input type= "radio" name= "opcje" value= "message" / > Wyślij wiadomość:
< br / >
< textarea name= "wiadomość" style= "width: 300px; height: 150px" >< /textarea >
< br / >
< input type= "submit" name= "submit" value= "Wyślij" >
< /form >
< /html >
Rysunek 6. Gotowa aplikacja odbierająca dane
od skryptu
Rysunek 7. Zarządzanie komputerem z poziomu
przeglądarki
www.phpsolmag.org
29
 
3334018.026.png 3334018.027.png 3334018.028.png 3334018.029.png 3334018.030.png 3334018.031.png 3334018.032.png 3334018.033.png 3334018.034.png 3334018.035.png 3334018.036.png 3334018.037.png
Technika
Listing 9. Odbieranie danych przez aplikację i wykonywanie żądanych poleceń
W Sieci
procedure TForm1 . IdHTTPServer1CommandGet ( AThread : TIdPeerThread ;
ARequestInfo : TIdHTTPRequestInfo ; AResponseInfo : TIdHTTPResponseInfo );
var
StrResult : String ;
login , pass , autoryzacja : boolean ;
begin
{w Memo zostaną umieszczone żądania (request server)}
Memo1 . Lines . Add ( ARequestInfo . Document );
{do logów dodajemy parametry przekazane do serwera}
Memo1 . Lines . Add ( 'Odebrane parametry:' );
Memo1 . Lines . Add ( ARequestInfo . Params . Text );
{walidacja danych:}
{czy login (parametr 0) jest poprawny?}
if ARequestInfo . Params [ 0 ]= 'login=admin'
then login := True else login := False ;
{czy hasło (parametr 1) jest poprawne?}
if ARequestInfo . Params [ 1 ]= 'pass=password'
then pass := True else pass := False ;
{identyikacja}
if ( login and pass ) then autoryzacja := True
else autoryzacja := False ;
{wypisujemy kod wynikowy}
StrResult := '<b>Odebrane dane:</b>'
+ '<p>Autoryzacja loginu: ' + BoolToStr ( login , True ) + '</p>'
+ '<p>Autoryzacja hasła: ' + BoolToStr ( pass , True ) + '</p>'
+ '<p>Wykonanie polecenia: ' + BoolToStr ( autoryzacja , True ) + '</p>' ;
AResponseInfo . ContentText := StrResult ;
{zwracamy informację do przeglądarki}
AResponseInfo . WriteContent ;
{sprawdzenie polecenia}
if (( ARequestInfo . Params [ 2 ]= 'opcje=message' ) and autoryzacja )
then
ShowMessage ( StringReplace ( ARequestInfo . Params [ 3 ] , 'wiadomość=' , '' , []))
else
if (( ARequestInfo . Params [ 2 ]= 'opcje=shutdown' ) and autoryzacja )
then
{wywołanie cmd.exe z parametrem shutdown- zamykamy system}
ShellExecute ( Handle , 'open' , 'cmd.exe' , '/c shutdown /s' , 'C:' , SW_HIDE )
else
end ;
http://www.codegear.com/downloads/
free/delphi
http://www.indyproject.org/
https://addons.mozilla.org/pl/firefox/
addon/60
http://www.4programmers.net
więc do sekcji Uses musimy dodać moduł
ShellAPI .
Sam kod nie jest trudny do zrozumienia, zo-
stał on oczywiście opatrzony komentarzami,
dlatego zachęcam do jego przejrzenia. Przyj-
rzyjmy się fragmentowi odpowiedzialnemu za
walidację danych.
Zmienna ARequestInfo.Params[index] zawie-
ra kolejne parametry, do których możemy od-
woływać się po ich indeksie. Nasz skrypt, który
pisaliśmy wcześniej, wysyła kolejno porcje da-
nych: login , będący parametrem zerowym, ha-
sło , będące parametrem pierwszym, i tak da-
lej. Ważna jest kolejność, jaką zachowujemy.
Wysyłając najpierw hasło, a dopiero potem lo-
gin do serwera- automatycznie zmieniamy ich
indeksy, co powoduje, że dane nie przechodzą
walidacji.
Możemy oczywiście skorzystać na przykład z
instrukcji for...to i sprawdzać po kolei wszystkie
odebrane skrypty, jednakże, przy tak małej ilo-
ści danych nie jest to konieczne.
Wynik działania
Proces tworzenia aplikacji, zarówno serwe-
ra jak i klienta, mamy już za sobą. Teraz nad-
szedł czas na przyjrzenie się rezultatom ich
działania.
Tak więc: uruchamiamy nasze aplikacje- ser-
wer i stronę z formularzem. Wypełniamy poda-
ne pola (niekoniecznie poprawnie, aby zoba-
czyć, czy wszystko działa tak jak należy) i wysy-
łamy dane. Przykład działania aplikacji pokaza-
ny jest na Rysunku 7.
Projekt klienta
Pierwszym krokiem będzie stworzenie stro-
ny WWW, której funkcją będzie wysyłanie pa-
kietów z danymi do naszej aplikacji. Opierać
się ona będzie na prostym formularzu, które-
go kod został zaprezentowany na Listingu 8.
Podobnie jak poprzednio, będziemy korzystać
z portu numer 8008 . Jeżeli zamierzamy korzy-
stać z aplikacji, z innego komputera niż local-
host, niekiedy wymagane będzie odblokowanie
tego portu na firewall’u.
Przyjrzyjmy się Listingowi 8. Jak widać, zo-
stały w nim zawarte planowane pola: Login oraz
Hasło , a także pola typu „Radio” , które repre-
zentują możliwe do wykonania zadania. Dla
przykładu umieściłem dwa: możliwość wyłą-
czenia zdalnego komputera, a także opcję wy-
świetlenia na nim wiadomości. Skoro ten etap
mamy już za sobą możemy przejść do projekto-
wania serwera.
Projekt serwera
Projekt serwera w dużej mierze opierać bę-
dzie się na aplikacji zaprezentowanej na po-
czątku obecnego rozdziału. Śmiało możemy
otworzyć tamten projekt i zacząć go mody-
fikować.
Zacznijmy od usunięcia Label-u podpi-
sanego jako „Odebrane parametry” , a także
komponentu Edit1 . Nie będą one nam już
potrzebne.
Następnie, tak jak poprzednio, klikamy na
komponent IdHTTPServer1 i przechodzimy do
Object Inspector’a. Odszukujemy Event pod-
pisany jako OnCommandGet i wpisujemy kod
z Listingu 9. Pozostałe procedury projektu po-
zostawiamy bez zmian.
Procedura OnCommandGet , którą przed
chwilą wpisaliśmy, zawiera przykładowe po-
lecenie zamykające system- w tym wypad-
ku posłużyliśmy się funkcją ShellExecute , tak
Podsumowanie
Mój niewielki artykuł opisuje tylko wierz-
chołek góry lodowej, jaką jest pakiet INDY .
Dla jego potrzeb wykorzystałem zaledwie
dwa komponenty z ponad ich stuelemento-
wej kolekcji. Pamiętaj, że „teoria śni, prakty-
ka uczy”. W momencie, gdy sam stworzysz
i przeanalizujesz aplikacje, zmodyfikujesz
ich kody i prześledzisz działanie, będziesz
mógł w pełni zrozumieć zagadnienia, które
nimi kierują.
ARTUR CHUDZIK
Autor w wolnych chwilach zajmuje się progra-
mowaniem, a także administracją portalem We-
bHat.pl, którego jest założycielem. Obecnie uczy się
w drugiej klasie 1LO w Łańcucie.
Kontakt z autorem: admin@webhat.pl
30
06/2007
3334018.038.png 3334018.039.png
 
Zgłoś jeśli naruszono regulamin