You are on page 1of 37

Laborator 14

APLICAŢIE SERVER HTTP
PENTRU BLACKFIN BF-537




CUPRINS
Privir ! a"#a$b%& a#&'ra (&")*io"a%it+ ii &"&i E$b!!! Srvr ț ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3
Srvr-ba#! v#, E$b!!! -b Srvr#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3
Cri" % Svr%or E$b!!! ț ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4
Srvr&% E$b!!! ./oA0a!1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,5
Co"tro%%r-&% Et0r"t BF-537 E2AC,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,3
Stiva ! 'roto)oa% L4IP5 6r"%&% V7K 8i API-&% BS7 #o)6t,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7
Co"(i9&rara i r&%ara #rvr&%&i HTTP ./oA0a!1 ș ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,:
Pa ii necesari configurării mediului de lucru: ș ...................................................................................8
Pa ii necesari configurării i rulării serverului HTTP: ș ș ....................................................................14
Configurarea unui IP static:.............................................................................................................20
/"rara 'ro'rii%or 'a9i"i '"tr& #rvr-&% 4b ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;;
Crara 'a9i"i%or )& )o" i"&t !i"a$i) ț ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;5
Pro)#ara C/I <Co$$o" /at4a= I"tr(a)> ?" $$ori,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;5
A'%i)a i '"tr& )o"tro%&% %!&ri%or ! ' BF537 ț ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;@
Lucrarea de faă !"i #ro#une #re$entarea #rinci#alelor as#ecte ale funcionalităii unui
server HTTP %m&edded' cu #articulari$are #e serverul (e& )o*+ead' inclus !n e,em#lele
ilustrative ale mediului de lucru -isual./P00. Pentru im#lementarea a#licaiei cu #rocesorul
2


1lac2fin' mediul -isual./P00 are incluse: driverele #entru controllerul %t+ernet' stiva L3IP
4 Lig+t53eig+t TCP6IP 7 "i -isual./P00 8ernel 4-.87.
Lucrarea conine "i un tutorial ste#5&95ste# #entru configurarea "i rularea serverului
)o*+ead' crearea de #agini noi' #recum "i o descriere generală a nivelurilor de servicii
oferite de server' care #ermit studenilor să !neleagă modul de funcionare al acestuia "i să !și
forme$e o &a$ă #entru de$voltarea a#licațiior ulterioare.
:n ultima #arte' este descrisă #as cu #as im#lementarea unei a#licații de control a
ledurilor de #e #laca 1lac2fin 1;<=> din cadrul unei #agini 3e& gă$duite #e serverul HTTP
)o*+ead.
Privir ! a"#a$b%& a#&'ra (&")*io"a%it+ții &"&i E$b!!! Srvr
Cre"terea dramatică a numărului dis#o$itivelor conectate la Internet este o cau$ă
directă a ieftinirii drastice a +ard3are5ului' a e,#ansiunii sistemelor de o#erare #uternice #e
=2 și c+iar ?4 de &ii #recum "i a omni#re$enei Internet5ului. Pe măsura e,tinderii continue a
internetului' !n cur@nd vor fi mai multe a#arate "i dis#o$itive conectate la Internet dec@t
oameni care accesea$ă internetul. Prin urmare' e,istă o creștere #uternică a cerinței #entru un
server (e& !ncor#orat #entru utili$area !n toate aceste dis#o$itive.
Pe măsură ce tot mai multe dis#o$itive sunt conectate la Internet' acestea devin din ce
!n ce mai #uternice "i com#le,e 5 "i vor aAunge ra#id cele mai semnificative com#utere din
societatea contem#orană. *#arate noi cu sisteme de o#erare !n tim# real' #rotocoale Internet
"i a#licaii &a$ate #e dis#o$itiv a#ar $ilnic "i viitorul unei ere #ost5PC arată #romițător. Cu
toate acestea' #entru ca astfel de a#arate să devină "i mai larg răs#@ndite' au nevoie de o
metodă universală #entru acces "i control. Btili$@nd un &ro3ser #entru client' dis#o$itivul
#oate oferi acces de la distană "i control #rintr5un %m&edded /erver.
Cu toate acestea' cele mai multe servere (e& nu sunt #roiectate #entru a fi
!ncor#orate' iar cele mai multe servere comerciale !ncor#orate folosesc sc+eme de #ro#rietate
!n redarea datelor dinamice.
Srvr-ba#! v#, E$b!!! -b Srvr#
La ultima numărătoare 4+tt#:663e&com#are.internet.com7' e,istau #este =C de servere
(e& enumerate de (e&Com#are. .e"i e,istă mult mai multe la ora actuală' doar < au fost
clasificate ca servere %m&edded. .eci' care este diferena !ntre un server %m&edded "i un
server /erver5&ased D
Bn server /erver5&ased are un set de cerine foarte diferite "i este destinat #entru a
satisface nevoile site5urilor care #u&lică #agini (orld (ide (e& /erver5&ased "i 6 sau
3


gă$duiesc comer electronic. .e e,em#lu' unele dintre cerinele #entru un server (e& /erver5
&ased includ:
• Posi&ilitatea de a scrie log5uri multi#le
• /ă su#orte /ervere -irtuale
• /ă confere un agent /EFP
• /ă su#orte //L v. =
• /ă ai&ă certificare integrată
• Posi&ilitatea !ntreținerii de la distanță
• /ă confere motor de căutare
*ceste cerine sunt vitale #entru serverele /erver5&ased de ca#acitate mare' dar de o
valoare mult mai mică #entru serverele %m&edded. /erverele %m&edded sunt #reocu#ate
!ndeose&i cu am#rentarea de memorie' ca#acitatea de a genera date dinamice #recum "i cu
#orta&ilitatea codului sursă #entru dis#o$itive din ce !n ce mai #ersonali$ate.
Cri"ț% Svr%or E$b!!!
/istemele integrate au nevoie de servere (e& #entru a !m&unătăi funciile e,istente'
fără a afecta funcionalitatea dis#o$itivelor e,istente. Cum multe dintre aceste dis#o$itive
sunt constr@nse de costuri' resursele de memorie "i CPB sunt de multe ori limitate. %ste vital
ca serverele %m&edded să fie foarte eficiente "i #uțin consumatoare de resurse. Cerinele
im#use unui server (e& %m&edded includ:
a> A$'r"t+ ! $$ori r!&#+
G am#rentă de memorie redusă este una dintre cerintele vitale. Pe l@ngă fa#tul că
serverul tre&uie să utili$e$e o cantitate de memorie redusă 4cod' +ea# "i stivă7' el nu tre&uie să
fragmente$e memoria. Fulte dis#o$itive em&edded au sc+eme de &a$ă de alocare a memoriei
care nu utili$ea$ă memoria !n mod eficient. C+iar dacă e,istă mecanisme de alocare eficientă
a memoriei' serverele (e& #ot fragmenta memoria #rin concurența #entru resurse cu alte
a#licaii em&edded 5 !n s#ecial deoarece serverele (e& tre&uie să răs#undă la solicitări ra#id
#entru a servi #aginile. Gdată ce memoria utili$ată #entru a servi o #agină este eli&erată'
aceasta #oate deveni inutilă' deoarece nu #oate fi unificată cu &locurile de memorie adiacente
din +ea#. Pentru a re$olva această #ro&lemă' serverele %m&edded tre&uie să fie fi,e !n
memoria #e care o folosesc. Pre5alocarea sau sc+emele de alocare statică #ot fi folosite #entru
a re$olva această #ro&lemă.
b> I"t9rara (a)i%+ ?" !i#'oAitiv
4


%ste o cerință vitală #entru serverele %m&edded ca acestea să #oată fi integrate cu
u"urină. %,istă două as#ecte ale integrării unui server (e&:
H Integrarea a#licaiei serverului (e& !n ITG/ 4Ieal Time G#erating /9stem7.
H Integrarea funciilor de acces la dis#o$itiv !n serverul (e&.
Integrarea unui server (e& !ntr5o a#licaie este cel mai usor de reali$at atunci c@nd
codul sursă este dis#oni&il. *desea' a#licaiile dis#o$itivului solicită ca serverul (e& să fie
integrat !ntr5o a#licaie e,istentă sau ca &ucla de evenimente a serverului să fie accesi&ilă. :n
ca$ul !n care serverul 3e& este furni$at numai !n formă &inară' sau o&inerea codului sursă
este #rea costisitoare' acest ti# de integrare este dificil.
Integrarea funciilor de acces la dis#o$itiv !ntr5un server (e& necesită crearea unei
legături !ntre *PI5urile de dis#o$itiv e,istente și BIL5uri. *cest lucru #oate fi reali$at !n mai
multe moduri' dar de o&icei este im#lementat #rintr5o metodă s#ecifică dis#o$itivului' dictată
de furni$orul serverului (e&. %ste de #referat o metodă industrială standard de conectare a
dis#o$itivului la (e&.
)> S&'ort '"tr& #to)ara 'a9i"i%or -b ?" RB2
Fulte dis#o$itive fără un disc sau un mediu #ermanent de stocare se doresc a fi
accesate "i controlate #rin intermediul (e&5ului. Pentru astfel de dis#o$itive' o metodă de
stocare a #aginilor (e& !n IGF este necesară. /erverele %m&edded ar tre&ui să fie ca#a&ile
să com#ile$e #aginile (e& "i a#oi să lin25e$e o&iectul #aginii la e,ecuta&ilul re$ultat.
/erverele &a$ate #e server (e& nu au o astfel de cerină.
!> Portabi%itata
Pe măsură ce inginerii trec adesea de la un #roiect +ard3are la altul' este im#ortant ca
serverul (e& %m&edded să ai&ă un grad ridicat de #orta&ilitate. %,#eriena anterioară tre&uie
să #oată fi transferată de la un #roiect la altul. Codul sursă care a fost deAa #ortat "i testat #e o
gamă largă de #latforme este necesar.
Srvr&% E$b!!! ./oA0a!1
Cu sco#ul de a fi cel mai răs#@ndit server (e& din lume' serverul )o*+ead este
conce#ut ca un server (e& %m&edded' nu at@t de mult #entru a satisface nevoile de astă$i' c@t
#entru a satisface nevoile de m@ine' c@nd utili$area sistemelor %m&edded' at@t acasă c@t "i la
locul de muncă' va cunoaște un #rogres remarca&il.
)o*+ead (e& /erver este o #arte din )o*+ead %m&edded Fanagement ;rame3or2
2.0' care !ncearcă să a&orde$e toate #ro&lemele legate de de$voltarea viitoare a sistemelor
%m&edded. Ca atare' )o*+ead este un server (e& miniaturi$at' cu o am#rentă de resurse
5


foarte redusă 4versiunea com#ilată #e o ma"ină (indo3s C% ocu#ă su& ?087. Poate deservi
#@nă la <0 cereri #e secundă #e un Pentium la 2??5FH$.
/erverul %m&edded )o*+ead este scris !n C "i a fost #ortat #e diferite sisteme de
o#erare' #recum (indo3s C<6C86ET6C%' Linu,' eCos' %m&edded Linu,' C+orusG/' G/P'
FicroC 6 G/' -,(or2s' L9n,' IIIJ "i Eovell Eet3are. )o*+ead (e&server necesită o stivă
TCP 6 IP 4descrisă !n #aragrafele următoare7' un timer de evenimente "i a#ro,imativ ?0 81
de I*F.
Co"tro%%r-&% Et0r"t BF-537 E2AC
Fodelul G/I 4 G#en /9stem Interconnection Ieference Fodel 7 este o descriere
a&stractă a unui #rotocol de comunicaii ce cu#rinde "a#te niveluri' fiecare av@nd un rol &ine
definit "i oferind servicii nivelului său imediat su#erior.
TCP6IP 4Transmission Control Protocol 6 Internet Protocol7 este un #rotocol de
comunicaii ce conine #atru niveluri. *cest #rotocol de comunicaii #ermite a#licaiilor să
trasmită date indiferent de mediul de comunicaie folosit.
Procesoarele *./P51;<=> sunt ec+i#ate cu un controller %t+ernet #entru F*C care
este com#ati&il cu standardul I%%% 802.=. Procesoarele folosesc o interfaă de standard
FII6IFII #entru a conecta dis#o$itive de reea. Placa *./P51;<=> 8IT5Lite are inclus un
circuit /F/C L*E8<C18=' #entru transmisia la nivel fi$ic' care se conectea$ă la interfaa
FII a #rocesorului' ca !n figura 1.
;igura 1
6


Legătura dintre dintre modelul G/I' TCP6IP "i #laca *./P51;<=> se #oate o&serva
!n figura de mai Aos:
;igura 2.2
Comunicaiile TCP6IP se reali$e$ă !ntre o a#licaie client "i o a#licaie server' serverul
fiind cel care KascultăL !n reea du#ă un client. Grice a#licaie va reali$a următorii #a"i #entru
a seta stiva "i #entru a iniiali$a comunicarea !ntre cele două a#licaii :
1. Crearea unei stive 4#entru fiecare a#licaie !n #arte7.
2. Crearea unei adrese IP 4#entru ca a#licaiile să #oată comunica !n reea' fiecare
tre&uie să ai&e o adresă IP' unică7. .e asemenea' a#licaiei i se va asocia o adresă de
#ort.
=. /ta&ilirea legăturii dintre client "i server
4. Ieali$area transferului de date
<. :nc+iderea cone,iunii
Stiva ! 'roto)oa% L4IP5 6r"%&% V7K 8i API-&% BS7 #o)6t
Pentru a #rograma o a#licaie !n reea' avem nevoie de un ITG/ 4Ieal Time
G#erating /9stem7' care este oferit de către -isual./P00 #rin 2ernelul -.8. *cesta este un
2ernel multitas2ing' care are !ncor#orate mecanisme de #lanificare "i de alocare a resurselor
com#ati&ile cu s#aiul de memorie "i cu constr@ngerile de tim# necesare #rogramării
7


#rocesorului 1lac2fin. *lte facilităi oferite de -.8 sunt reali$area unor a#licaii
#erformante' folosind tem#late5uri 4#recum cel de reali$are al a#licaiilor TCP6iP7.
-isual./P00 are inclusă o stivă de #rotocolale TCP6IP o#en source' L3IP'
com#ati&ilă cu ar+itectura #lăcii *./P51;<=>. ;olosirea acestei stive im#lică e,istena
unui sistem de o#erare' care !n ca$ul nostru este -.8 4-isual ./P00 8ernel7.
/tiva de #rotocoale L3IP are trei com#enente:
1. /tiva de #rotocoale TCP6IP
2. G &i&liotecă de interfaare cu 2ernelul folosit
=. 4-.8 !n ca$ul nostru7
4. G &i&liotecă de drivere #entru a conecta stiva la
controllerul %t+ernet 41;<=> %F*C !n ca$ul
nostru7
Bn alt lucru ce tre&uie menionat este fa#tul ca stiva
L3IP folose"te standardul 1erc2el9 /oc2ets Interface 4sau
soc2et5uri7' ceea ce !nseamna că a#licaiile client "i server folosesc soc2et5uri *PI #entru a
transmite "i #entru a rece#iona date.
Co"(i9&rara și r&%ara #rvr&%&i HTTP ./oA0a!1
*#licatia 3e& este #ortată de #e un server 3e& )o5*+ead #e 1lac2fin folosind stiva
L3IP 4 Lig+t53eig+t TCP6IP 7 "i 2ernelul -.8 4 -isual./P00 8ernel 7. /erverul HTTP
#oate fi găsit !n e,em#lele din folderul de instalare al mediului de lucru' mai concret !n:
C:\Program Files\Analog Devices\VisualDSP 5.0\Blackfin\Examles\ADSP!BF5"#
E$!%i& 'i&e\'A(\)**P+Server
Pașii necesari configurării mediului de lucru:
1. Conectai ca&lul B/1 .e&ug *gent la #laca *./P51;<=> %M58it Lite "i
celălalt ca#ăt conectai5l la un #ort B/1 li&er al calculatorului. Conectai #laca folosind
ada#torul *C la o sursă de curent.
8


Conectai ca&lul cross5over %I*6TI* <?851 la #ortul IN4< al #lăcii "i la cel al
calculatorului sau la al unui router 4 #osi&ilitate de conectare dis#o$itive mo&ile #rin
3ireless7.
2. /e #orne"te mediul de lucru -isual./P00' #rin du&lu5clic2 #e iconia de #e
.es2to#:
3. *dresa IP a #lăcii #oate fi o&inută de la un server .HCP. :n ca$ul !n care
această o#țiune de lucru este dis#oni&ilă !n configurația aleasă' se selectea$ă Stti"9# --C
Pr(r")#,
9



.in secțiunea P%&9i"# se &ifea$ă TCPDIP Co"(i9&ratio" 2a"a9r ca !n figură' a#oi
se salvea$ă cu G8:
*#oi se selectea$ă Stti"9# --C TCPDIP Co"(i9&ratio"5 se alege Nt4or6E "i se
verifică dacă este setată o#iunea U# 7HCP,
10


4. /electați din meniul #rinci#al S##io" - N4 S##io"' care lansea$ă S##io"
-iAar!,
Session Wizard
11


5. :n fereastra S%)t 'ro)##or' se selectea$ă din C0oo# a tar9t 'ro)##or' A7SP
BF537 . *sigurați5vă că #rocesorul din familia 1lac2fin este selectat. /e a#asă
&utonul NFt.
?. .in fereastra S%)t Co"")tio" T=' se selectea$ă EG-KIT Lit. /e a#asă NFt.
12


>. .in fereastra S%)t P%at(or$ se selectea$ă A7SP-BF537 EG-KIT Lit via 7b&9
A9"t din meniul S%)t =o&r '%at(or$. /e com#letea$ă numele sesiunii sau se
acce#ta numele im#licit' S##io" "a$. /e a#asă NFt.
13


8. :n fereastra Fi"i#0 se verifică !ncă o dată configurația setată5 iar a#oi se a#asă
Fi"i#0, Eoua sesiune A7SP-BF537 EG-KIT Lit a fost creată.
Gdată configurat mediul de lucru -isual./P00' trecem la configurarea #roiectului
HTTP /erver !n vederea !ncărcării și rulării sale #e #laca %M58IT 1;<=>.
Pașii necesari configurării și rulării serverului HTTP:
1. -om desc+ide gru#ul de #roiecte necesare serverului HTTP #rin &utonul
OFi% --C B'" --C ProH)t /ro&'O :
14


2. :n G#en ProAect )rou# .ialog5ul care a#are se urmea$ă calea CIJPro9ra$
Fi%#JA"a%o9 7vi)#JVi#&a%7SP 5,EJB%a)6(i"JEFa$'%#JA7SP-BF537 EG-Kit
LitJLANJHTTPKSrvrJ și se selectea$ă fișierul 0tt'#vr-9r'b(537,!'95 du#ă
care se confirmă cu B'",
/e desc+id doua #roiecte' 0tt'#rvr-BF537,!'H "i %ib4b#vrb(537,!'H5 ale căror
fișiere #ot fi vi$uali$ate !n ;ile1ro3serul din #artea st@ngă a ecranului.
15


3. Pentru vi$uali$area și eventual' modificarea setărilor generale ale (e& serverului' se
e,tinde su&meniul cu fișierele sursă ale #roiectului 0tt'#rvr-BF537' /ource Fi%#'
și se face du&lu clic2 #e fișierul 4bK$ai",). :n #artea drea#tă se afișea$ă codul
sursă al fișierului selectat' unde #utem regăsi' !n regiunea evidențiată și !n figura de
mai Aos' #rinci#alii #arametrii configura&ili ai serverului:
16


• N&$+r&% 'ort&%&i. Eumărul de #ort im#licit #entru 3e&server este setat la 80.
Pentru a sc+im&a numărul #ortului im#licit' se modifică linia port !". .acă această
setare im#licită este sc+im&ată' atunci c@nd se accesea$ă #agina de start' va tre&ui să
utili$ai O0tt'IDDFFF,FFF,FFF FFFI==O' unde == este numărul de #ort setat.
• N&$+r&% ! r?")r)Lri. :n mod im#licit' serverul 3e& )o*+ead re!ncearcă de
cinci ori #entru a găsi un #ort alternativ utili$a&il !n ca$ul !n care #ortul im#licit nu
este dis#oni&il. *ceastă valoare im#licită #oate fi modificată #rin sc+im&area liniei
retries #.
• Paro%a. Pentru a #roteAa #rin #arolă accesul la server' #arola #oate fi !nscrisă !n
fi"ierul de faă. Linia de unde se #oate modifica #arola este $pass%ord T&''()
unde noua #arolă este !nscrisă !ntre g+ilimele OO. Parola im#licită este goală' ceea ce
#ermite accesul inițial la server utili$atorului fără o #arolă.
• Pa9i"a ! #tart i$'%i)it+. Pentru adăugarea de #agini noi' vor tre&ui modificate
#aginile 3e& din su&directorul 4b5 așa cum vom vedea !n #artea următoare a
tutorialului. Paginile 3e& actuale oferă un &un #unct de #lecare #entru noile modele
de #agini 3e&. .acă numele #aginii de start im#licite este sc+im&at' codul tre&uie să
fie' de asemenea' modificat' #entru a reflecta noua #agină de start. .efiniția acesteia
17


este situată #e linia 4b#R!ir)t <-P5 T <M0o$,a#' M>>N noua #agină de start este
!nscrisă !n locul celei #redefinite: 0o$,a#'.
4. /e salvea$ă eventualele modificări și se trece la com#ilarea surselor #roiectului. /e
accesea$ă ProH)t -C B&i%! ProH)t' sau se face clic2 #e iconița din figura de mai Aos'
sau se a#asă direct F7 4 /+ortcut 8e95ul #entru 1uild 7:
.acă 1uild5uirea #roiectelor s5a !nc+eiat fără erori' se trece la e,ecuția #rogramului'
mai concret' la rularea efectivă a serverului. /e a#asă &utonul R&" din meniul 7b&9 sau se
face clic2 #e iconița din figura de mai Aos sau se a#asă F5,
*#licaia redă BIL5ul #e care tre&uie să !l accesai ' asemănător cu figura de mai Aos:
18


.esc+idei un &ro3ser de Internet 4#e calculatorul conectat la #lacă' sau #e orice alt
dis#o$itiv conectat !n aceeași rețea #rin intermediul routerului7 "i scrieți BIL5ul afișat ?"
Vi#&a%7SPOO, /erverul HTTP răs#unde cu #aginile accesate:
19


Configurarea unui IP static:
:n ca$ul !n care configurația reali$ată #entru rularea serverului HTTP nu oferă
#osi&ilitatea conectării la un server6router ca#a&il să facă .HCP sau #ur și sim#lu se dorește
configurarea unui IP static #entru #lacă' mediul de lucru -isual./P00 oferă această
#osi&ilitate.
Pentru un IP static' se selectea$ă Stti"9# -C Pr(r")#5 a#oi se alege P%&9i" "i se
&ifea$ă TCPDIP Co"(i9&ratio" 2a"a9r5 dacă nu este deAa &ifat' e,act ca la #asul 1 de la
configurarea .HCP. /e confirmă cu BK.
*#oi' se selectea$ă Stti"9# C TCPDIP Co"(i9&ratio"5 se alege Nt4or6E și se
de&ifea$ă o#țiunea U# 7HCP5 !n ca$ că aceasta este &ifată, /e com#letea$ă adresa IP'
/u&net Fas25ul ' adresa )ate3a9 "i adresa F*C. Iată un e,em#lu !n figura următoare:
20


.u#ă com#letarea acestor ru&rici' se confirmă cu &utonul G8. Ei se cere salvarea
configurației alese !ntr5un fișier cu e,tensia ,t)' 4 TCPDIP Co"(i9&ratio" Fi% 7. /e
denumește du#ă #lac fișierul cu configurația aleasă' du#ă care se salvea$ă cu Sav.
.e menționat că dis#o$itivul conectat !n rețea cu #laca' fie el c+iar calculatorul de #e
!ncărcăm #roiectul' fie un telefon mo&il sau alt calculator conectat #rin intermediul
routerului' tre&uie să fie configurat la r@ndul lui cu un i# static' din aceeași clasă de i#5uri cu
cel setat #entru #lacă. *ceastă setare este esențială #entru sta&ilirea cone,iunii' din moment
ce nu mai avem serverul de .HCP' care reali$a acest lucru.
21


Iecom#ilăm #roiectele "i rulăm #rogramul' relu@nd aceeași #ași de la configurația
care folosește .HCP.
Bb#rvațiP Q" )a!r&% t#t%or !i" %aborator5 a$ (o%o#it )o"(i9&rația )& i' #tati)
'"tr& '%a)+5 at&")i )R"! "-a$ )o")tat 'ri" i"tr$!i&% t%(oa"%or $obi% (o%o#i"!
#i#t$ ! o'rar 'r)&$ A"!roi!5 #a& -i"!o4# 2obi%5 r#')tiv !i"tr-o $ași"+
virt&a%+ ) $&%a #i#t$&% ! o'rar 2/o,
/"rara 'ro'rii%or 'a9i"i '"tr& #rvr-&% 4b
*șa cum am o&servat !n e,em#lul de configurare și rulare a serverului HTTP' #agina
e,em#lu a fost un fișier HTFL' #us la dis#o$iție tot !n folderul cu materialele
e,em#lificatoare. .ar dacă utili$atorul dorește generarea #ro#riilor #agini de către serverul
HTTP' s#re a #utea fi a#oi accesate de orice client care accesea$ă serverulD
*cest lucru !l #utem reali$a cu aAutorul -b)o$'5ului' un utilitar care #reia #aginile
dorite dintr5un fișier 4denumirile lor7 și generea$ă un fișier de date' 4bro$,)5 care conține
descrierea statică a conținutului #aginilor. :n #lus' vom vedea !n ca#itolul următor' că
utilitarul 3e&com# #oate com#ila "i fișiere cu alte e,tensii !n afară de ,0t$% sau imagini' cu
conținut dinamic' #recum fișiere ,ASP.
Pașii necesari generării #ro#riilor #agini 3e& sunt următorii:
1. Co#ierea fișierelor aferente #aginilor #ro#rii 4fișiere .+tml sau .*/P 0 eventualele
#o$e referite !n acestea 7 !n directorul 4b' din cadrul #roiectului. *ceste #agini se #resu#un
22


a fi anterior create de utili$ator !n orice editor te,t sim#lu sau mediu #entru /ite
.evelo#ement. Condiția firească este ca sinta,a HTFL6*/P a #aginilor să fie corectă.
Pentru e,em#lificare' am creat un fișier HTFL &asic' t#t,0t$%' !n care afișăm un
te,t #e ecran și o imagine' t#tKi$a9,9i(.
Co#iem cele două fișiere !n directorul 4b din cadrul #roiectului' așa cum am
#reci$at mai sus.
2. .esc+idem fișierul S (i%# T din același director menționat anterior' 4b' cu orice
editor de te,t' #entru a adăuga !n lista fișierelor ce urmea$ă a fi com#ilate de utilitarul
3e&com# cele două fișiere dorite.
/alvăm noul conținut al fișierului și !nc+idem editorul de te,t.
3. Pornim un terminal linie de comandă' de unde urmea$ă să introducem comanda
#entru generarea fișierului 4bro$,) cu aAutorul utilitarului 4b)o$',F.
23


Pentru aceasta' tre&uie să ne #lasăm !n directorul !n care se află e,ecuta&ilul
3e&com#' fișierul S (i%# T și' res#ectiv' #aginile noastre' !n ca$ul de față c+iar directorul
4b,
Gdată reali$at acest lucru' introducem !n linia de comandă următoarea comandă'
#entru generarea fișierului 3e&rom.c' cu conținutul static al #aginilor dorite :
%e*comp+e,e - files . %e*rom+c
4. /e co#ia$ă noul fișier generat' 4bro$,)' in directorul 4#E31;E; 4 one level5u# 7' av@nd
griAă să !l !nlocuim #e cel anterior.
<. /e reiau toți #așii #entru com#ilarea și rularea #roiectului. .u#ă ce serverul răs#unde cu
adresa IP' #utem verifica e,istența noilor #agini create' introduc@nd !n &ro3ser următorul
BIL :
0tt'IDD17;,13,;,;;Dt#t,0t$%
unde 1>2.1?.2.22 este adresa IP atri&uită de către serverul .HCP 4sau cea setată static de
utili$ator7 la această rulare.
/erverul răs#unde cu #agina 3e& nou adăugată:
24


Crara 'a9i"i%or )& )o"ți"&t !i"a$i)
%,istă două modalități #rinci#ale de a crea o #agină (e& dinamică !n cadrul
serverului HTTP )o*+ead:
• )enerarea tag5urilor HTFL #rin cod convenional C
• Crearea #aginii (e& "i a introducerea datelor dinamice #rin tag5uri de
e,#ansiune

)enerarea de tag5uri HTFL #rin cod C nu necesită o mani#ulare s#ecială de către
serverul (e& "i #oate #ărea o a&ordare atractivă la !nce#ut. Cu toate acestea' nu durea$ă mult
tim# #@nă ce !ntreg ciclul re#etitiv Oeditare' com#ilare' dis#la9' re5editare' re5com#ilare' re5
dis#la9O devine foarte o&ositor. Paginile (e& sunt greu de manageriat fără un re$ultat final
imediat.
Cea de5a doua a&ordare #ermite cicluri de de$voltare mult mai ra#ide. Instrumente de
#roiectare HTFL' cum ar fi .ream(eaver' #ot fi folosite #entru a crea #agini (e& !ntr5o
manieră -USI-U/ <-0at-Uo&-S-I#--0at-Uo&-/t>, Tot ceea ce răm@ne' sunt datele
dinamice care tre&uie !nlocuite la momentul e,ecuiei.
Pro)#ara C/I <Co$$o" /at4a= I"tr(a)> ?" $$ori
Procesarea Common )ate3a9 Interface 4C)I7' #usă !n a#licare ca un #rocesor de
formulare !n memorie re#re$intă o metodă s#ecifică serverului K)o*+eadK de a conferi
coninut dinamic #aginilor.
25


Procesarea C)I !n stil vec+i re$ulta !n crearea unui nou #roces #entru fiecare cerere a
unui BIL C)I. .in moment ce unul din sco#urile #rinci#ale ale C)I este adesea
#relucrarea datelor introduse de utili$ator' acest as#ect era foarte lent "i greoi. .in această
cau$ă' serverul 3e& )o*+ead folosește o im#lementare #ro#rie a C)I' numită generic
)o;ormsP' care este o soluie mult mai #otrivită #entru sisteme integrate care solicită
solutii com#acte' de !naltă #erformană.
Procedurile )o;orms rulea$ă !n memorie fără a crea un nou #roces #entru fiecare
cone,iune &ro3ser. Prin #artaAarea s#aiului de adrese cu serverul 3e& )o*+ead'
#rocedurile )o;orms #ot accesa direct conte,tul com#let al cererii. .e asemenea' +andler5ul
)o;orm decodifică și #arsea$ă toate datele PG/T #entru facili$area accesului la date.
)o;orms este im#lementat ca un Handler BIL Handler care inter#retea$ă adresele
BIL care !nce# cu MD9o(or$O. /egmentul BIL ce #recedă OgoformO define"te numele
form5ului' urmat de eventualele varia&ile PG/T. .e e,em#lu:
- goform - m/0orm1 name 2o3n4v5rstă6"
*#elea$ă #rocedura )o;orm denumită Om9;ormO "i decodifică automat Quer9string5
ul Oname R No+n S v@rstă R =0O' definind varia&ilele )o;orm numite OnumeO "i Ov@rstăO.
Procedura tre&uie declarată și ulterior definită !n cadrul fișierului main.c al #roiectului
HTTP /erver.
Pentru a !nțelege mai &ine !ntreg mecanismul #rocedurilor )o;orms' de la declararea
și definirea acestora' #@nă la a#elarea #rocedurilor și modul de trasmitere si #arsare al
#arametrilor' să construim un e,em#lu sim#lu de #relucrare a datelor utili$atorului. Iată
#așii necesari:
1. Creăm un fișier cu e,tensia ,0t$%D,a#'' !n care vom scrie următorul conținut :
26


Codul HTFL reali$ea$ă un sim#lu form #entru in#utul a două c@m#uri de către
utili$ator' unul #entru nume' res#ectivul unul #entru adresă. .e remarcat modul !n care se
definește +andlerul #entru PG/T5ul form5ului.
.e menționat că fișierul cu codul sursă este #re$ent și #e .-.5ul cu materialele
#roiectului' c+iar !n folderul 3e&' su& numele de (or$#,a#'. %ste de datoria studentului de a
verifica !ncă o data validitatea codului și de a adăuga numele fișierului !n fișierul S (i%# T5
dacă acest lucru nu a fost făcut deAa' !n vederea generării #aginilor cu aAutorul
4b)o$',F.
2. /e reiau #așii 3, și 4, de la generarea #ro#riilor #agini 3e&' !n care se
generea$ă din nou fișierul 3e&rom.c cu aAutorul utilitarului 3e&com#.e,e.
3. :nainte de a trece la rularea serverului și testarea #aginii' tre&uie să definim
!nsă #rocedura )o;orm a#elată de acțiunea de su&mit a form5ului din documentul HTFL.
*cest lucru se reali$ea$ă !n același fișier din care am vă$ut că se #oate configura
(e&serverul )o*+ead' și anume fișierul 4bK$ai",), .esc+idem din nou fișierul !n
mediul de lucru -isual./P00 și com#letăm' ca !n figura de mai Aos' #artea de declarații ale
antetelor de funcții' cu antetul #rocedurii )o;orm :
27


Cor#ul #rocedurii (or$T#t !l vom scrie !n #artea de Aos a fișierului' #rintre celelalte
definiții de funcții deAa e,istente' salv@nd ulterior fișierul cu modificările făcute:
*ceasta ar tre&ui să afișe$e !n #agina din &ro3ser in#ut5ul utili$atorului din form5ul
HTFL creat anterior.
.e menționat că #rocedura )o;orm este res#onsa&ilă #entru scrierea antetului HTTP
"i a coninutului HTFL al documentului !na#oi !n &ro3ser5ul utili$atorului. ;uncția
4b#Ha!r creea$ă un antet HTTP standard cu tag5uri HTFL iniiale. 4b#Footr !nc+ide
documentul cu o etic+etă de !nc+idere HTFL. :n interiorul #rocedurilor )o;orm'
4b#/tVar' 4b#R!ir)t' 4b#-rit' "i 4b#-ritB%o)6 sunt unele dintre cele mai
utile a#eluri *PI.
4. /e recom#ilea$ă sursele #roiectului' du#ă care se rulea$ă. .u#ă ce serverul
afișea$ă adresa IP 4 o&ținută #rin .HCP sau setată static 7' se introduce !n &ro3ser BIL5ul
#entru form5ul creat de noi anterior:
0tt'IDD17;,13,;,;;D(or$#,a#'5
28


.u#ă ce com#letăm cele două c@m#uri cu valori de test și a#ăsăm &utonul G8
4 event5ul de su&mit al form5ului 7' #utem o&serva că serverul e,ecută #rocedura definită de
noi și reafișea$ă noul conținut al #aginii HTFL 4 așa cum a fost el redefinit !n #rocedură'
inclu$@nd și datele PG/T ale utili$atorului 7:
A'%i)ați '"tr& )o"tro%&% %!&ri%or ! ' BF537
:n cele ce urmea$ă' vom #re$enta o a#licație #entru controlul ledurilor de #e #laca
1;<=>' Kde la distanțăL' #rin intermediul unor &utoane din cadrul unei #agini !ncărcate #e
serverul HTTP )o*+ead. Fecanismul #rinci#al de #reluare a datelor utili$atorului 4controlul
&utoanelor7 și de comandare a led5urilor de #e #lacă este #rocesarea C)I' im#lementată #rin
#rocedurile )o;orms' #re$entate anterior.
Bb#rvațiP Q" )a!r&% !o)&$"tații5 (o%!r&% .7plicație HHTP8Server9 )o"ți"
'roi)t&% 'rA"tat ! (a*+ ?" #ta!i&% (i"a%, Tot&și5 # r)o$a"!+ #t&!"t&%&i r%&ara
t&t&ror 'a8i%or !#)riși și ra%iAara $+)ar a &"i 'ro)!&ri '"tr& &" %!5 '"tr& a
?"ț%9 $ai bi" )% 'rA"tat, Fo%!r&% :HTTP8Server9 )o"ți" #&r#% i"iția% a%
4b #rvr&%&i5 așa )&$ # 9+##) % ?" F$'%&% )%or ! %a A"a%o9 7vi)#5 #t&!"t&%
'&tR"! 'or"i ! %a a)#ta și $o!i(i)a #&r#%5 &r$R"! t&toria%% #t'-b=-#t' !i"
'roi)t&% ! (aț+,
-om !nce#e cu reali$area interfeței grafice #entru controlul L%.5urilor' și anume
c+iar #agina 3e& care va fi !ncărcată #e serverul HTTP. *m ales o interfață sim#listă' dar
destul de sugestivă și intuitivă:
29


Cele ? &utoane cores#und celor ? led5uri #rinci#ale de #e #laca 1lac2fin 1;<=>' iar
cele două stări ale &utoanelor cores#und a#rinderii6stingerii ledurilor.
Codul aferent design5ului #aginii de mai sus este #re$ent !n cadrul documentației' !n
fi"ierul b&toa",a#'' din același folder 4b 4 folderul cu toate #aginile 3e& 7. Iată5l ilustrat
și !n ca#tura de mai Aos:
30


Brmea$ă definirea #rocedurilor din s#atele &utoanelor HTFL' care vor fi a#elate
odată cu evenimentul de clic2 asociat fiecărui &uton !n #arte. Pentru fiecare led !n #arte vom
avea două #roceduri' una asociată a#rinderii acestuia' res#ectiv cealaltă asociată stingerii
ledului. -om !nce#e #rin declaraiile celor 12 #roceduri 4? leduri J 2 #roceduri #entru
fiecare7' declaraii ce tre&uie inserate !n sursa C #rinci#ală a #roiectului' 4bK$ai",)'
#roced@nd e,act ca la e,em#lul cu formularul din ca#itolul anterior' cel cu #rocedurile
)o;orms' inser@nd codul din figurile de mai Aos:
.e asemenea' tot !n cadrul acestui fișier' tre&uie să introducem codul necesar inițiali$ării
configurației ledurilor' #recum și +eaderele !n care sunt definii regiștrii res#onsa&ili cu
controlul celor ? leduri. Codul de mai Aos este im#ortat din #roiectul e,em#lificativ LE7
B%i"6 <C>' din cadrul fi"ierului sursă I"itia%iAatio",):
31


Continuăm cu definirea #rocedurilor res#onsa&ile cu a#rinderea6stingerea ledurilor "i
res#ectiv' cu reconstrucia #aginii 3e& iniiale !n care modificăm !nsă starea &utonului a#ăsat'
!ntruc@t coninutul #aginii iniiale' b&toa",a#'' este #ierdut #ractic la momentul #ost5
#rocesării C)I. *cesta este motivul #entru care tre&uie să rescriem !n fiecare #rocedură
liniile de cod res#onsa&ile cu trimiterea codului HTFL către &ro3ser. /imulăm astfel
TdinamicitateaL #aginii 3e& #rin reconstrucia ei la a#ăsarea fiecărui &uton 4!n fiecare
#rocedura )o;orm7.
:ntreg codul #entru cele 12 #roceduri este scris !n cadrul fi"ierului 4bK$ai",) de #e
.-.5ul cu documentația. :n cele ce urmea$ă vom ilustra și e,#lica #artea de cod aferentă
a#rinderii6stingerii unui led' #entru celelalte raționamentul fiind analog. Iată #rocedura
%!1Ko"' asociată a#rinderii %!&%&i 1:
32


%,#licații figură:
1. -ectorul %!&riV7W este un vector de !ntregi' declarat alături de celelelalte #rototi#uri ale
funcțiilor' !n #artea de !nce#ut a fișierului 4bK$ai",): #tati) i"t %!&riV7WN inde,ul
acestui vector se asocia$ă fiecărui led !n #arte 4 leduriU1V #entru ledul 1' leduriU2V #entru
ledul 2...7 iar valoarea #oate fi 05led stins' 15led a#rins. *cesta va folosi la comandarea
ledurilor din funcția a'ri"!<>' descrisă mai Aos.
2. ;uncția a#rinde47 are codul ilustrat !n figura următoare:
;uncția reali$ea$ă stingerea tuturor ledurilor' #rin setarea registrului
X'PBRTFIBKCLEAR' urm@nd a#oi a le a#rinde #e cele ale căror valori cores#un$ătoare
din vectorul leduriUV sunt 15ledul tre&uie a#rins. Celelelate răm@n stinse.
3. ;uncția 4b#4rit<> este folosită #entru trimiterea codului HTFL către &ro3ser' urm@nd
a reconstrui #agina HTFL inițială.
4. Cele ? condiții' #entru fiecare led !n #arte' sunt folosite !n determinarea #o$ei
cores#un$ătoare stării fiecărui led !n #arte' #o$ă a cărei cale este transmisă &ro3serului
#entru a fi afișată și a reda fidel starea ledurilor.
Procedura #entru stingerea ledului este identică #rocedurii #entru a#rinderea sa' cu
e,ce#ția fa#tului că vom seta valoarea 0 !n vectorul de leduri' mai concret linia %!&riV1WY1
va fi !nlocuită de %!&riV1WYE' cores#un$ătoare stingerii ledului 1.
33


Celelalte #roceduri' cores#un$ătoare celorlalte leduri' sunt identice #rocedurii ledului
1' e,ce#t@nd indicele din vectorul de leduri' care se va sc+im&a !n funcție de ledul curent
4 leduriU2V #entru ledul 2' leduriU=V #entru ledul = etc.7.
.u#ă scrierea tuturor celor 12 #roceduri cores#un$ătoare am&elor stări #osi&ile #entru
cele ? leduri' reluăm #așii de 1uild5uire a #roiectului' urm@nd a rula serverul du#ă corectarea
tuturor eventualelor erori de com#ilare sau lin2editare.
.acă #roiectul se !ncarcă cu succes #e #lacă și rulea$ă' vom introduce !n &ro3ser
BIL5ul:
0tt'IDD1@;,13:,E,3Db&toa",a#''
unde 1C2.1?8.0.= este i#5ul serverului 3e& la această rulare 4 setat static !n ca$ul de faă 7.
/erverul 3e& răs#unde cu #agina cu design5ul im#lementat de noi' #agină !n care
toate ledurile sunt stinse' stare redată și la nivelul #lăcii' așa cum este și normal #entru starea
inițială 4 setările inițiale includ stingerea tuturor ledurilor' dacă acestea nu sunt deAa stinse 7.
34


*#ăs@nd #e oricare dintre leduri' o&servăm că #agina se modifică cores#un$ător
&utonului a#ăsat 4#o$a &utonului7' concomitent cu a#rinderea6stingerea ledului
cores#un$ător #e #lacă.
35



*#ăs@nd mai multe &utoane' o&servăm că a#licația redă fidel modificările !n #agină
#recum și starea ledurilor de #e #lacă:
36



.e remarcat modificarea BIL5ului #aginii la fiecare clic2 cu BIL5ul cores#un$ător
ultimei rutine )o;orm a#elate !n cadrul #roiectului. *stfel' #entru ultima ca#tură din
&ro3ser' BIL5ul este 0tt'IDD1@;,13:,E,3D9o(or$D%!3Ko"5 deci ultimul in#ut al utili$atorului
din &ro3ser a fost clic2 #e &utonul #entru a#rins ledul =.
37