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-
kę
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ć:
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
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-
kę
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
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
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
Plik z chomika:
barbara1964
Inne pliki z tego folderu:
Zagadnienia maturalne z informatyki.rar
(5424 KB)
Zaawansowane programowanie w systemie Linux.rar
(2144 KB)
W głąb języka C.rar
(895 KB)
Bezpieczeństwo kont PHP.pdf
(998 KB)
Delphi i PHP.pdf
(516 KB)
Inne foldery tego chomika:
!!! STOP Przymusowi Szczepień !!!
!7-ZiP 920 najNOWszy
!Horoskop Majow
## ZAPROJEKTUJ SOBIE SAM ## --------------------
@ Ewa May
Zgłoś jeśli
naruszono regulamin