Realizarea Programelor de Retea Bazate pe Tehnologii Client Server

Realizarea programelor de retea bazate pe tehnologii client- server

CAPITOLUL I

Note introductive

A. Retele de calculatoare

Impreuna cu imensul potential al numarului mare de computere precum si extinderea pe care o are acum Internetul, oamenii pot comunica liber, repede si cu folos. Sistemele deschise, orientate pe obiect, interfetele grafice, bazele de date si super masinile – acestea sunt termenii care pot avea impact in cele mai nebanuite moduri.

Modelul client/server defineste acel drum spre succes al organizatiiler care folosesc tehnologia in urmatoarea decada. Acesta este punctul in care se inregistreaza o descrestere a aplicatiilor de la minicomputere si mainframe-uri catre desktop. Usurinta in utilizare, interfetele usoare (GUI) sunt cai care duc ca oricine sa poata folosi cu succes tehnologia existenta, personal si direct.

In aceasta competitie trebuie si este imperios necesar ca sa se foloseasca orice oportunitate pentru a reduce costurile, imbunatati calitatea . Multe din organizatiile de azi recunosc ideea de a lucra dupa mersul pietei, de a fi deschisi si a avea o interactiune cu piata directa, exemplu:

expunerea ofertei de produse online,

caracteristici si metode de fabricatie,

online-ordering

customer-complaints

Prin aceste lucruri o companie stie sa obtina acel feed-back atat de necesar din piata, de la clienti, iar prin masuri corective sa-si imbunatateasca si mai mult calitatea produselor sale.

II. Retele de calculatoare

II.1 Arhitecturi retele calculatoare

Pentru a intelege protocoalele de retea este necesara cunoasterea tipurilor de retele. Termenul de retea de obicei inseamna un set de computere si periferice (imprimante, modem-uri, plottere, scannere ) care sunt conectate impreuna cu ajutorul unui mediu(agent). Conexiunea poate fi directa (printr-un cablu) sau indirecta (printr-un modem). Diferitele mecanisme din retea comunica intre ele printr-un set de reguli (protocolul). Dispozitivele din retea pot exista in aceeasi incapere sau raspindite intr-o cladire. Ele pot fi separate de citiva km prin utilizarea liniilor telefonice dedicate, a microundelor, fibra optica sau a altui sistem similar.Ele chiar pot fi raspindite in toata lumea, conectate din nou prin intermediul comunicatiilor la distanta lunga. Prezentarea retelei (actualele dispozitive si maniera in care ele sunt conectate intre ele ) este numita topologia retelei.

De obicei, daca dispozitivele retelei se afla intr-o singura locatie cum ar fi o cladire sau un grup de incaperi, ele fac parte din reteaua locala (LAN). Lan-urile au de obicei toate dispozitivele din retea conectate de un singur tip de cablu de retea. Daca dispozitivele sunt imprastiate pretutindeni, cum ar fi diferite cladiri sau diferite orase, ele sunt setate de obicei in citeva LAN-uri care sunt legate intr-o structura mai mare numita retea pe zona extinsa ( WAN ). Un WAN este compus din doua sau mai multe LAN-uri. Fiecare LAN are propriul cablu de retea care conecteaza toate dispozitivele in LAN–ul respectiv. LAN-urile sunt legate intre ele printr-o alta metoda de conectare, adesea linii telefonice cu viteza mare sau cabluri de retea foarte rapide numite magistrale. WAN-urile sunt adesea tratate ca o singura entitate in scopuri organizatorice.

Exista trei topologii principale de retea :

Magistrala

Stea

Inel

II.1.1 Reteaua Bus

Reteaua Bus este cea mai simpla, cuprinzind o singura cale principala de comunicatie cu fiecare mecanism atasat principalului cablu (bus) printr-un dispozitiv numit emitator – receptor sau cutia de jonctiune. De la fiecare emitator – receptor , un alt cablu ( adesea foarte scurt ) se ataseaza la adaptatorul de retea al dispozitivului.

Principalul avantaj al retelei bus este ca aceasta permite a high – speed bus. Un alt avantaj al retelei “ bus “ este ca de obicei este imun la problemele cu oricare card de retea din interiorul unui dispozitiv din retea, deoarece emitatorul – receptorul permite trafic prin baza, daca un dispozitiveste atasat sau nu la cutia de legatura. Fiecare capat al “bus” –ului se termina cu un bloc de rezistoare sau un mecanism electric similar sa marcheze din punct de vedere electric, sfirsitul cablului. Fiecare dispozitiv de pe platforma are un numar special de identificare, sau adresa, care “ informeaza “ dispozitivul ca informatiile primite sunt pentru acel dispozitiv.

O retea “bus” este adesea un cablu direct. El este rasucit in jurul peretilor si cladirilor dupa nevoie. Acesta are o singura cale de la un capat la celalalt, cu fiecare capat terminat intr-un fel ( de obicei cu un rezistor ). Multe dispozitive in reteaua “ bus” pot trimite sau primi date de-a lungul “bus’-ului prin comprimarea mesajului cu adresa destinatarului.

O variatie a topologiei retelei “ bus” este gasita in multe LAN-uri mici care folosesc cablul Ethernet subtire ( care arata ca si cablul coaxial de televiziune ) sau cablul perechii rasucite ( care seamana cablurilor telefonice). Acest tip de retea consta dintr-un cablu coaxial lung care ajunge la toate calculatoarele.

Exista trei concepte la comunicatia pe magistrala:

Transmiterea semnalului

Reflectarea semnalului

Terminatorul

Transmiterea semnalului.

Datele din retea, sub forma de semnale electronice, sunt transmise tuturor calculatoarelor din retea; totusi informatia este acceptata doar de calculatorul a carui adresa corespunde cu adresa codificata in semnalul transmis. La un moment dat un singur calculator poate trimite mesaje. Performanta retelei va depinde de numarul calculatoarelor legate, deoarece numai un calculator poate trimite date la un moment dat, deci in cazul in care sunt mai multe calculatoare conectate acestea vor trebui sa astepta pe rand, deci reteaua va fi mai lenta. Magistrala este o topologie pasiva, adica acestea nu transmit semnalele de la un calculator la altul. Daca unul se defecteaza reteaua continua sa functioneze.

Reflectarea semnalului

Deoarece datele sau semnalele electronice sunt transmise in intreaga retea, acestea vor parcurge cablul de la un capat la altul. Daca semnalului i s-ar permite sa se deplaseze fara intrerupere, el ar continua se se reflecte inainte si inapoi, impiedicand celelalte calculatoare sa transmita semnale. Din acest motiv semnalul trebuie oprit odata ajuns la destinatie.

Terminatorul

Pentru a opri reflectarea semnalului, la fiecare capat al cablului este plasat un terminator, care va absorbi semnalele libere. Absorbirea acestora “elibereaza” cablul, permitand si altor calculatoare sa poata transmite date.

Mai sus se pot vedea cele 3 topologii de conectare a retelelor.

II.1.2 Reteaua “Ring”

Topologia retelei ring este adesea desenata cum si numele sugereaza, sub forma de cerc. In ciuda presupunerii ca un cerc are baza (coloana vertebrala ) cu capetele cablului cuplate pentru a forma o deschidere, nu exista nici un inel de cablare. Numele de cerc deriva din constructia unitatii centrale de control.

Termenul de inel ( cerc ) este un termen impropriu pentru ca retelele “ring” nu au un cablu interminabil ca o retea “ bus” cu cele doua terminatoare cuplate intre ele. Cercul se refera la desenul unitatii centrale care dirijeaza trecerea mesajului retelei. Intr-o retea “ring” seminficativa, unitatea centrala de control este numita Unitate de Acces Media sau MAU. MAU are inauntrul sau un circuit sub forma de cerc ( de unde si numele topologiei retelei ). Inelul din interiorul MAU serveste ca “ bus “ pentru dispozitive, in vederea obtinerii mesajelor.

II.1.3 Reteaua “ hub”

Reteaua” hub” foloseste un cablu principal mai mult decit reteaua “ bus”, care este numit backplane. De la backplane, un set de cabluri sunt directionate catre centru, care este o cutie continind citeva porturi in care dispozitivele sunt introduse. Cablurile la un punct de conectare sunt adesea numite picatru deoarece ele se scurg din backplane in porturi.

Retelele “hub” pot fi foarte vaste, folosind un backplane cu fibre optice de mare viteza si legaturi Ethernet putin mai incete pentru hub-urile din acelasi workgroup. Reteaua “hub” poate fi de asemenea mica, cu un cuplu de hub-uri sustinind citeva dispozitive conectate impreuna prin cabluri standard Ethernet. Reteaua “hub” este accesibila (poti incepe de la putin si extinzi cit ai nevoie) care este partea atractiei sale.

Retelele “hub” au devenit populare pentru instalari extinse, in parte pentru ca ele sunt usor de setat si de intretinut. De asemenea, ele pot fi sisteme mai putin costisitoare in instalarile mai extinse. Backplane poate oferi o distanta considerabila, tocmai ca o retea “bus“, in timp ce porturile, punctele de conexiune sunt de obicei grupate intr-o cutie sau intr-un tablou. Pot fi multe tablouri sau cutii de conexiune atasate la backplane.

Concentratoare

Unul din echipamentele care incepe sa devina un standard in cadrul retelelor este hub-ul si switch-ul. Acestea reprezinta componenta centrala intr-o retea cu topologie stea.

Concentratoarele pot fi de urmatoarele tipuri:

Active

Pasive

Concentratoarele active, sunt cele mai intalnite, in sensul ca ele regenereaza si retransmit semnalele, la fel ca receptoarele. Datorita acestui fapt ele au intre 8 si 24 de porturi acestea se numesc si multiport.

Concentratoarele pasive sunt panourile de cablare sau blocurile de conectare. Ele actioneaza doar ca puncte de conectare, fara sa amplifice sau sa regenereze semnalul.

I.1.4 Variante ale diferilelor topologii

Magistrala- stea

Aceasta topologie este o combinatie intre topologia magistrala si cea stea si consta in mai multe retele cu topologie stea, conectate prin intermediul unor trunchiuri liniare de tip magistrala.

Daca un calculator se defecteaza, acest lucru nu va afecta restul retelei; celelalte calculatoare vor functiona normal. Daca insa se defecteaza un concentrator conexiunile la acel concentrator vor fi off-line iar cele doua retele astfel formate, nu vor fi vizibile intre ele.

Inel-stea(numita si inel cablat in stea) este foarte asemanatoare cu topologia magistrala-stea. Ambele include un concentrator, care contine de fapt inelul , respectiv magistrala. Concentratoarele dintr-o magistrala stea sunt conectate prin trunchiuri liniare de magistrala, iar cele din inelul stea sunt conectate in principal prin concentratorul principal intr-o topologie stea.

II.2. Retele locale

TCP/IP lucreaza cu LAN-uri si WAN-uri si exista citeva aspecte importante ale topologiilor LAN si WAN. Desi exista multe topologii pentru LAN- uri, trei topologii sunt dominante: bus, ring si hub. LAN este acronimul de la "Local Area Network" deci o grupare de calculatoare, imprimante si alte dispozitive care se gasesc in aceeasi locatie geografica.

II.3 Retelele extinse (Wide Area Network)

Cum am mentionat mai devreme, LAN-urile pot fi combinate intr-o vasta entitate numita WAN. WAN-urile sunt de obicei compuse din LAN-uri legate intre ele printr-o legatura cu viteza mare (cum ar fi o linie telefonica sau cablul necesar). La intrarea in fiecare LAN, unul sau mai multe dispozitive actioneaza ca legatura dintre LAN si WAN: acestea se numesc porti de intrare(gateways). O poarta de intrare este interfata intre un LAN si un WAN si se aplica pentru oricare alt LAN care acceseaza Internetul: un dispozitiv de obicei actioneaza ca o poarta de intrare de LAN spre Internet (care chiar este un WAN foarte extins ).

Multi termeni altii decit gateway ( poarta de intrare ) sunt de asemenea folositi. Router si bridge sunt tot porti de intrare, dar ele realizeaza diferite sarcini. LAN-urile pot fi legate la un WAN printr-o poarta de intrare care dirijeaza datele dintre baza LAN si WAN.. Intr-o simpla prezentare routerul este folosit sa realizeze aceasta functie.

II.4 Interconectarea retelelor

II.4.1 Routere

Routere sunt echipamente care permit dirijarea traficului din doua retele care au clase de IP diferite. Router-ele se caracterizeaza printr-o tabela de rutare, tabela care cuprinde reguli de tranzit a pachetelor discpri si WAN-uri si exista citeva aspecte importante ale topologiilor LAN si WAN. Desi exista multe topologii pentru LAN- uri, trei topologii sunt dominante: bus, ring si hub. LAN este acronimul de la "Local Area Network" deci o grupare de calculatoare, imprimante si alte dispozitive care se gasesc in aceeasi locatie geografica.

II.3 Retelele extinse (Wide Area Network)

Cum am mentionat mai devreme, LAN-urile pot fi combinate intr-o vasta entitate numita WAN. WAN-urile sunt de obicei compuse din LAN-uri legate intre ele printr-o legatura cu viteza mare (cum ar fi o linie telefonica sau cablul necesar). La intrarea in fiecare LAN, unul sau mai multe dispozitive actioneaza ca legatura dintre LAN si WAN: acestea se numesc porti de intrare(gateways). O poarta de intrare este interfata intre un LAN si un WAN si se aplica pentru oricare alt LAN care acceseaza Internetul: un dispozitiv de obicei actioneaza ca o poarta de intrare de LAN spre Internet (care chiar este un WAN foarte extins ).

Multi termeni altii decit gateway ( poarta de intrare ) sunt de asemenea folositi. Router si bridge sunt tot porti de intrare, dar ele realizeaza diferite sarcini. LAN-urile pot fi legate la un WAN printr-o poarta de intrare care dirijeaza datele dintre baza LAN si WAN.. Intr-o simpla prezentare routerul este folosit sa realizeze aceasta functie.

II.4 Interconectarea retelelor

II.4.1 Routere

Routere sunt echipamente care permit dirijarea traficului din doua retele care au clase de IP diferite. Router-ele se caracterizeaza printr-o tabela de rutare, tabela care cuprinde reguli de tranzit a pachetelor discpre o retea catre cealalta retea.

In general la conectarea retelei interne (LAN) la alta retea mai mare folosim un router.

Un alt mecanism gateway, numit bridge (punte ), este flosit sa conecteze LAN-urile folosind acelasi protocol de retea. Puntile sunt folosite numai cind acelasi protocol de retea (cum ar fi TCP/IP) exista pentru ambele protocoale. Nu conteaza ce mijloc media este folosit. Puntile pot conecta perechi rasucite LAN la LAN-uri coaxiale, de exemplu, ori actioneaza ca o interfata la o retea de fibre optice. Atita timp cit protocolul de retea este acelasi, puntea functioneaza in mod corespunzator.

Daca doua sau mai multe LAN-uri sunt implicate intr-o organizatie si exista posibilitatea unui trafic intens intre ele, este mai bine sa conectam cele doua LAN-uri direct la o punte in loc sa incarcam baza cu trafic inutil.

II.4.2 Bridge-uri

Folosirea unei punti pentru conectarea a doua LAN-uri este prezentata in figura urmatoare.

Intr-o configuratie care foloseste punti intre LAN- uri, traficul de la un LAN catre altul poate fi trimis prin punte in loc sa fie trimis pe baza, furnizind astfel o mai buna executare. Pentru servicii ca Telnet si FTP, diferenta de viteza intre folosirea unei punti si trecerea printr-un router pe o baza intens folosita poate fi semnificativa.

II.4.3.Broutere

Un brouter, asa cum arata numele, combina calitatile unei punti(bridge) si ale unui router. El poate actiona ca router pentru un anumit protocol si ca punte pentru altele.

Brouterele pot:

Sa ruteze protocoalele rutabile selectate

Sa actioneze ca punte pentru protocoalele nerutabile

Sa ofere interconexiuni mai avantajoase din punct de vedere al costurilor si posibilitatilor de administrare decat puntile si ruterele folosite separat.

III Programarea in retea

III.1 Concepte folosite

Client/Server inseamna multe lucruri pentru multi oameni. De obicei perceptia generala este ca aplicatia are o portiune client, ce ruleaza pe un calculator local, in speta un PC, si o parte de server care ruleaza pe o statie UNIX sau un mainframe. De obicei aplicatiile client server sunt orientate pe baze de date insa sunt si aplicatii care ofera anumite servicii cum sunt:

server WEB

servere email

servere RAS

servere DNS, KCC, si majoritatea serviciilor de pe server.

Servere FTP, NIS etc

III.1.1 Conceptul client-server

III.1.1.1 Avantaje ale tehnologiei client/server

Note generale

Organizatiile doresc sa beneficieze de avantajele costului scazut ale mediilor prietenoase ale statiilor de lucru. Este de asemenea o nevoie puternica si o dorinta de a capitaliza investitiile existente. Astfel, retelele companiilor sunt puse in asa fel incat sa conecteze statiile de lucru catre diferite servere..

Tehnologia client/server aduce ca beneficiu utilizarea celor mai eficiente interfete utilizator, stocare date, conectivitate si servicii de aplicatie. Produsele client/server sunt instalate in interiorul organizatiei prezente dar nu sunt efectiv folosite. Modelul client/server furnizeaza mijloace tehnologice in vederea utilizarii investitiilor anterioare in concordanta cu optiunile tehnologiei actuale. Este un declin dramatic in ceea ce priveste costul componentelor tehnologiei client/server. Organizatiile folosesc aceasta tehnologie ca o oportunitate pentru a furniza solutii afacerii. Competitia intre servicii si calitate pe piata maresc si mai mult nevoia de a profita de beneficiile disponibile de la aplicatiile construite pe modelul client/server.

Tehnologia client/server in cele mai bune implementari ale sale muta captarea de date si procesarea de informatii direct catre utilizatorul expert – adica utilizatorul cu abilitatea de a raspunde erorilor de date, si utilizatorul cu abilitatea de a folosi informatiile facute disponibile. Sistemele cele mai importante sunt implicate direct in procesul executarii afacerilor, si sunt fortate sa arate valoric acest lucru.

Modelul tehnologiei client/server furnizeaza mijloace de integrare a aplicatii cu productivitate ridicata pentru un angajat anume sau un manager cu nevoi de a procesa date pentru a satisface cerintele de procesare a informatiilor in cadrul companiei.

Imbunatatirea partajarii datelor

Datele care sunt colectate ca parte a procesului uzual de lucru si stocate pe un server sunt disponibile imediat tuturor utilizatorilor autorizati. Folosirea limbajului SQL pentru a defini si a manipula date furnizeaza suportul pentru accesul deschis tuturor clientilor ce proceseaza informatie. SQL ofera tuturor utilizatorilor autorizati accesul la informatie printr-o imagine care este specifica nevoilor lor. Serviciile de retea transparente arata ca aceleasi date sunt disponibile cu acelasi nivel pentru toti utilizatorii desemnati.

Servicii integrate

In modelul client/server , toate informatiile pe care clientul este indreptatit sa le utilizeze sunt disponibile pe statia sa. Nu este necesara schimbarea in modul terminal sau logarea la alt procesor pentru accesarea de informatii. Toate procesele si informatiile autorizate sunt direct disponibile pentru interfata statiei sale.

Resurse partajate pe platforme diverse

Modelul client/server furnizeaza oportunitati de a realiza adevarate sisteme deschise. Aplicatiile pot fi create si implementate fara a tine cont de platforma sau caracteristici tehnice ale software-ului. De aceea utilizatorii pot obtine servicii sau acces transparent la servicii furnizate de baze de date, sau servere de aplicatii. Sistemele de operare si plaltformele hardware sunt independente de aplicatii si de uneltele folosite pentru dezvoltarea plicatiei respective.

Aplicatiile client/server functioneaza in doua moduri. Acestea pot functtiona ca si suport pentru o aplicatie deja existenta – sau acestea pot furniza intrari de date, pastrare date, sau raportare pentru un numar de clienti si servere. In celalalt caz, folosirea – sau chiar existenta – unei masini gazda este total mascata pentru dezvoltator prin folosirea diverselor limbaje de comunicare (exemplu limbajul SQL).

Schimbul si interoperabilitatea de date

SQL este o definitie standard si un limbaj de acces. Acest standard permite multor vanzatori care produc la ora actuala aplicatii de daze de date, motoare care sa manipuleze aceste date ca si tabele SQL. Aproape toate uneltele de dezvoltare permit o compatibilitate cu bazele de date accesate prin SQL. Serviciile de retea permit o conectivitate intre un client local si servere distante. Cu cateva produse de baze de date, cum sunt Ingres Star, un utilizator poate defini o vedere consolidata a datelor care in mod fizic distribuita intre platforme diverse.

Dezvoltatorii de sisteme au gasit un punct in care acest amestec neomogen va fi un atribut al dezvoltarii de motoare de baze de date din ce in ce mai puternice fara a fi dependente de platforma.

Serviciile pentru baze de date oferite ca raspuns al unei cereri SQL poate fi oferit de unul din serverele de baze de date: Oracle, Ingres, Sybase, care ruleaza pe platforme Windows NT, OS/2, Unix, sau Solaris. Mediul de dezvoltare (SDE) si uneltele trebuie sa implementeze o interfata cu producatorul bazei de date si cu produsele care exista in sistemul de operare. Dezvoltatorul nu trebuie sa stie ce motor sau ce sistem de operare ruleaza. Daca SDE nu anuleaza dreptul dezvoltatorului de a folosi acces direct in baza de date, atunci entuziasmul acestuia se va dovedi prin evitarea folosirrii unor optiuni ale vanzatorului bazei de date.

Modelul client/server asigura capabilitatea de a face cereri pe loc de informatie. Ca rezultat, optimizarea suportului pentru SQL dinamic in cazul bazelor de date distribuite este vital pentru succesul noii generatii de aplicatii client/server. Prima generatie implementeaza aspectele procesului afacerii. A doua generatie introduce cereri locale ca urmare a exerientei castigate in interiorul informatiilor deja existente.

Mascarea accesului fizic la date

Prin folosirea SQL pentru accesul la date, utilizatorii pot accesa informatii din baza de date de oriunde din retea. De pe PC-urile locale , serverul local, sau de oriunde din reteaua WAN, accesul la date fiind oferit dezvoltatorului si utilizatorului prin aceeasi cerere. Singura diferenta ar fi performanta diferita daca banda alocata este insuficienta. Datele mai pot fi accesate si din memoria RAM, de pe un disc magnetic optic, prin aceleasi cereri SQL. Tabelele logice pot fi accesate fara a cunoaste ordinea coloanelor. Numeroase tabele pot fi “alaturate” pentru a obtine un nou tabel logic folosit de aplicatie in acelasi fel, fara a tine cont de forma lui fizica.

Folosirea unor tipuri noi de date, cum ar fi obiectele binare foarte largi ( BLOB ) permit altor tipuri de informatii cum ar fi imagini, video si audio sa fie stocate si accesate folosind aceleasi cerei SQL pentru aceesul la date.

Independenta de locatie a datelor

Dezvoltatorii au astazi o foarte mare independenta. Datele sunt accesate prin SQL fara a fi nevoie de a cunoaste hardware, sisteme de operare sau locatia fizica care furnizeaza datele. Retelele permit accese ale aplicatiilor si cerereri SQL prin RPC. Retelele pot fi bazate pe OSI (Open Systems Interconnect ), TCPIP, SNA ( System Network Architecture) dar nu va fi nevoie de schimbare a codului scris. Dezvoltatorul unei solutii se loveste de standarde de proces fara a considera platforma fizica. Limbaje de dezvoltare ca: COBOL, C pot functiona pe platforme foarte diverse.

Conducere centralizata

Primul pas in a oferi o administrare eficienta a unei retele LAN este de a stabili standardele pentru hardware, software, retele, instalari, dezvoltari si codificari. Aceste standarde folosite impreuna cu alte produse de marca (IBM, HP, AT&T ) permit o vedere de ansamblu a retelei LAN.

Revolutia tehnologica

Este foarte important de realizat o vedere de ansamblu asupra tehnologiei in timpul vietii unui sistem. Arhitectura pe care un sistem este construit trebuie sa fie capabila sa suporte toti utilizatorii de-a lungul intregii sale vieti. Organizatii largi au luat in calcul pentru aplicatiile lor o folosinta intre 5 si 10 ani. Multe sisteme sunt construite cu o vedere asupra a numai ce exista astazi, insa ei sunt gata sa renunte la sistemele invechite odata cu schimbarile ce apar in arhitectura, schimbari la care nu s-ar fi putut adapta cu sistemele vechi.

Comparatii intre intrari / iesiri

Majoritatea sistemelor au nevoie de informatii citite si apoi salvate. Folosirea modelului client/server aduce ca avantaj utilizarea puterii de procesare a serverului, clientul preluind numai rezultatul cererii emis catre server. Serverul este de obicei o masina foarte rapida (atit pentru accese de citire cit si de calcule, dar si pentru trimiterea datelor catre clienti ). Clientii folosesc puterea serverului simultan rezultind o incarcare mica a statiilor client comparativ cu serverul.

Stocare de date

Cea mai mare revolutie tehnologica care a afecta industria de computere a fost cauzata de necesarul de crestere a capacitatii de stocare disponibila pentru aplicatie. Memoria RAM este folosita pentru executia programelor si pentru a stoca date temporar sau permanent.

Utilizatorii au intrat in era utilizarii memoriilor mari si ieftine ducind la eficientizarea aplicatiilor care aveau nevoie de memorie suplimentara.

Interfata grafica de proiectare ( utilizare )

Interfetele grafice utilizator( GUI ) au nevoie de o mare cantitate de memorie RAM pentru a pastra imaginiile de pe ecran, listele, textul de ajutor, caile de navigatie. Deoarece GUI permite procesarea aleatoare in locul traditionalei procesari secventiale, toate posibilele procese logice precum si codul de control GUI asociat imaginii trebuie sa fie disponibil in RAM pentru a furniza raspunsurile adecvate.

Baze de date relationale

O alta schimbare dramatica in domeniul software este zona bazelor de date. Sistemele de fisiere traditionale si tehnologia bazelor de date de bazeaza pe localizarea referintelor pentru o buna performanta a accesului. Localizarea referintelor implica ca toate datele necesare sa satisfaca o cerere sunt stocate fizic unele linga altele. In orice caz, mediile de astazi au nevoie de accese multiple ale inregistrarilor provenite din tabele diferite si locuri diferite. Performanta se poate obtine in aceste medii cind baza de date foloseste chei de extragere organizate in liste de cautare. Acccesul fizic la baza de date este limitat numai la selectarea inregistrarilor care satisfac criteriul de cautare.

Tehnologia bazelor de date relationale, folosind SQL imbina aceste lucruri cu succes. Cererea de cautare poate fi evaluata aplicand-o indexilor care identifica campurile ce satisfac criteriul de cautare. Numai aceste inregistrari sunt citite si extrase din baza de date fizica.

Conectivitatea

Era echipamentelor desktop a inceput cu introducerea calculatoarelor personale IBM PC.

Au fost simtiti mai multi pasi:

Statiile de lucru emulau sisteme complexe

Adaugarea de servere de baze de date si comunicatii

Aplicatii complete client/server

Productivitatea utilizatorului

Comparand productivitatea unui utilizator care foloseste pentru analiza unui buget un spreadsheet sau un program in COBOL. In primul caz utilizatorul are in fata o imagine vizuala a problemei iar introducerea unei simple variabile devine triviala comparativ cu introducerea acesteia in programul COBOL, unde va fi nevoie de un programator caruia trebuie sa-I fie explicata problema, acesta sa o inteleaga apoi sa incerce sa realizeze acest lucru.

III.1.1.2. Cai de imbunatatire

Lucru direct pe server

Bazele de date sunt de obicei mutate pe servere pentru a folosi procesoarele acestuia sau performantele I/O mai ridicate. Alte aplicatii pot fi partajate tot pentru viteza dar si pentru disponibilitate.

Reducerea timpului total de executie

Prin rularea unor cereri de cautare, sau alte comezi ce folosesc capacitatea de calcul foarte intens, precum si procedurile stocate duc la reducerea acestui timp de executie.

Folosirea unui client multitasking

O data cu devenirea tot mai sofisticata a statiei client , capabilitatea ca aceasta sa execute mai multe procese in acelasi timp este din ce in ce mai atractiva. Task-uri independente pot fi activate pentru a gestiona procesele de comunicatie, cum sunt email, mesaje news, colectarea de date de la servere remote. Aplicatii cu productivitate cunoscuta ca procesoare de texte si prezentari grafice pot fi atractive. Multe din aceste aplicatii pot fi legate impreuna pentru a furniza informatii despre mediul de procesare. Functii ca DDE sau OLE permit includerea de foi de calcul in documente . Aceste link-uri pot fi active in sensul ca modificari ce se executa in aceste “obiecte” se vor pastra si “updata” in documentul care le poarta.

Dezvoltatorii pot testa aprecia, crea si verifica programe in paralel.

Reducerea traficului de retea

Reducerea traficului de retea se poate face prin cateva metode bine cunoscute:

Minimizarea cererilor – acestea sunt realizate prin ecrane de prezentare. In modelul client/server, este posibil de a introduce scaderi de trafic. In vechile baze de date dBAse, FoxPro, Access sau Paradox, cautarea este un proces pe care il gestioneaza clientul. Toate inregistrarile sunt trimise clientului care va face si filtrarea necesara. In cazul unor baze de date de mari dimensiuni acest lucru este dramatic. Inregistrarile care sunt blocate de un client apar ca “lock-ed” pentru restul clientilor ele neputand fi updatate pana cand proprietarul lor nu va termina tranzactia. Pentru acest motiv modelul server nu este eficient la un nr. mare de utilizatori. OLTP(Online Transaction Processing) in modelul client/server are nevoie de trigere si proceduri stocate. Produse ca Sybase, Ellipse sau Ingres folosesc capacitatile pe care serverele gazda le ofera.

Folosirea cu grija a resurselor de retea

Folosirea aplicatiilor si a serverelor de baze de date pentru a produce un raspuns pentru un set necesar manipularii unor date pot reduce dramatic traficul in reteaua respectiva. Nu exista o valoare adaugata in a muta niste date de pe statia client catre alta zona a retelei. Scaderea maxima a incarcarii retelei se realizeaza atunci cand datele care vin la client sunt doar cele necesare in a popula forma respectiva de interogare.

III.1.1.3 COMPONENTELE APLICATIEI CLIENT/SERVER

Clientul in modelul client/server este statia de lucru. Acceasi statie de lucru daca este folosita in comun de mai multi utilizatori in acelasi timp devine server.

Rolul clientului

In modelul client/server, clientul joaca rolul de consumator al serviciilor provenite de la un server. Modelul face o separare clara intre functiunile bazate pe ideea de servere care furnizeaza servicii ca urmare a cererilor din partea clientilor.

Facilitati cum sunt DDE, OLE sau CORBA permit o foarte usoara comunicare intre un server si un client prin traditionala “cut and paste”.

O statie client foloseste un SO local pentru a acoperi atat serviciile de baza cat si interfata cu sistemul de operare de retea.

Serviciile clientului

Request for service

Statiile client emit cereri pentru un server arondat. Cand acest server este de fapt acelasi procesor sau este un procesor de informatie de retea, formatul cererii este acelasi. NOS software adauga specificatii speciale in cererea trimisa de solicitant.

Comunicarea interproces (IPC) este termenul generic folosit pentru a descrie comunicatiile intre procesele ce ruleaza. In modelul client/server, aceste procese pot fi pe acelasi computer, in aceeasi retea sau distante in Internet.

Cel mai intalnit serviciu furnizat de NOS este redirectarea. Acest serviciu intercepteaza cererile sistemului de operare si le redirecteaza catre serverul sistemului de operare. In acest fel, cererile catre directoarele discului, fisierele, imprimantele , porturile serale sunt interceptate de catre software-ul de redirectare(peste LAN) catre locatia corecta a serverului. Este posibil pentru unele servicii sa fie furnizate de catre client.

Apeluri de proceduri distante

Aceste proceduri permit standardizarea unor proceduri prin care programatorii trebuie sa scrie procedurile astfel incat procedurile distante sa fie recunoscute si interpretate corect.

Fax/Print Services

NOS permite clientului generarea de cereri cand printerul este ocupat. Acestea sunt redirectate de catre NOS redirector si controlate de catre serverul de printare. Clientii pot vedea status-ul cozii de printare in orice moment. Multe servere de printare notifica clientul cand cererea de printate a fost terminata . Serviciile de fax sunt disponibile in aceeasi maniera ca si print serverele, cu aceeasi interfata si notificare.

Servicii de ferestre

O statie client poate avea la un moment dat mai multe ferestre deschise la un moment dat. Capabilitatea de a activa, muta, mari sau ascunde o fereastra este permisa de catre serviciul de control a ferestrelor al sistemului de operare client. Aceste servicii sunt esentiale intr-o implementare client/server, pentru ca acestea interactioneaza cu serviciul de mesaje anuntand utilizatorul asupra diferitelor evenimente.

Servicii de pornire “remote”

Anumite aplicatii opereaza foarte bine pe clienti fara a avea un disk local de stocare date; terminale X sunt exemplele concludente. Statiile client trebuie sa asigure suficient software intr-un EPROM pentru a permite programului de boot care sa activeze acele interfete ce permit incarcarea sistemului din alte medii decat cele locale.

Alte servicii la distanta

Aplicatiile pot fi invocate de pe un client sau a fi executate pe un server la distanta. Procesul de Backup este cel mai intalnit exemplu.

Servicii utilitare

Sistemele de operare permit functiuni locale cum sunt: copiere, lipire, editare, comparare.

Servicii de mesaje

Servicii de baze de date

Schimb de date dinamic

DDE este o facilitate a sistemelor Windows si OS/2 care permite utilizatorilor sa trimita date intre aplicatii de la diferiti furnizori prin suportul unor functii API. De exemplu un chart poate fi legat de o baza de date pentru a permite ultimele grafice atunci cand datele se modifica.

Crearea de obiecte legate sau incluse (OLE)

OLE este o extensie a DDE care permite utilizatorilor ca obiectele sa fie create de catre aplicatii care “nu stiu” cum sa utilizeze acel obiect. Aceasta de fapt va fi o referinta care va folosi componentele ce stiu sa manipuleze aceste date. De exemplu, un document creat cu un procesor de texte poate include o imagine creata cu un packet grafic. Imaginea poate fi convertita intr-o imagine grafica interna folosita de acest procesor de texte cum ar fi WPG. Cu OLE, imaginea poate fi inclusa in forma sa originala in document. Cand imaginea este selectata, atunci packetul care a realizat acea imagine preia controlul manipularii imaginii. Activarea software-ului este total transparenta utilizatorilor .

CORBA

CORBA( Common Object Request Broker Arhitecture) este o specificatie de la OMG(Object Management Group), un consortiu ce vinde sisteme UNIX. OLE accentueaza impartirea de resurse intre aplicatii pe un singur desktop, insa CORBA adreseaza aceste transferuri intre platforme si cum aceste obiecte se pot muta prin retea. CORBA permite clientilor sistemului Windows sau Unix sa imparta obiecte. Un procesor de text care opereaza pe un desktop poate include imagini generate pe o platforma Unix.

Serverul

Serverul este un computer multiuser. Nu exista specificatii speciale care sa faca dintr-un computer obisnuit un server. Platforma hardware trebuie sa fie selectata pe baza cerintelor si economiei. Serverele , pentru aplicatiile client/server lucreaza cel mai bine cand ele sunt configurate cu un sistem de operare care suporta partajarea memoriei, isolarea aplicatiilor, si multitasking.

Serverul asigura controlul asupra resurselor partajate. Aplicatiile de pe un server trebuie sa fie izolate unele de altele pentru ca in cazul unei erori una sa nu o poata strica pe cealalta.

Cel mai intalnit sistem de operare de retea este Novell Netware .

Rolul serverului

Serverele ofera servicii de aplicatii, fisiere, tiparire, fax, imagine, comunicare, securitate, si controlul retelei. Acestea vor fi descrise in cele ce urmeaza.

Este foarte important de a intelege serverul ca si concept nu ca si o implementare fizica. Serviciile client si serverel pot fi oferite de catre acelasi sistem fizic. Aria retelelor se muta la retelele peer (ce pot comunica liber), oferind posibilitatea ca orice “device” sa poata juca atat rol de client cat si de server.

Serverele de aplicatii ofera suportul pentru clienti de a accesa informatii. In modelul client/server aceste servicii pot fi oferite pentru o intreaga organizatie sau doar pentru o parte a acesteia invocata prin IPC (Interprocess Control) . De exemplu, un sistem de salarii poate pastra datele despre angajati pe un server, salariile pe un alt server, iar calculele sa se execute pe un al treilea server. Aceste servere pot rula sisteme de operare diferite si pot fi situate la distanta mare unul de altul. Aplicatia client invoca aceste servicii fara a considera aceste tehnologii sau de a sti de diferentele fizice geografice intre aceste servere.

Serverele de fisiere ofera accesul catre fisierele sale discret catre clienti pe baza politicii de securitate elaborata de administratorii serverului. Exemple de file servere sunt low-end: Novell NetWare, OS/2 sau Windows NT. Clasa de mijloc o ocupa serverele UNIX cu acees via NFS. Ultimul nivel este oferit de mainframe-uri. Servicii de fisiere Serviciile de fisiere se ocupa cu accesul la directoarele si fisierele localizate in zona de stocare a serverului. Aceste servicii sunt posibile prin procesul redirectare existent in sistemul de operare de pe statia client.

Server de calcul

Sunt servere pe care se executa diverse calcule complexe . Acestea au configuratii speciale hardware, multiprocesor. Un exemplu sunt realizarea de programe in domeniul grafic 3D unde sunt simulate miscari complexe cu numar foarte mare de obiecte, rezolutii foarte mari.

Serverele de baze de date sunt controlate de catre motoare ca si Sybase, IBM, Ingres, Informix,sau Oracle. Serverul de fisiere ofera spatiul initial, iar baza de date aloca spatiul pentru tabelele proprii in spatiul alocat de file server.

Aceste masini sunt responsabile pentru a oferi servicii specializate necesare de catre produsele de backup, erori software, sau spatiu insuficient.

Primele tipuri de baze de date erau servere de fisiere cu o interfata diferita. Produse ca dBase, Clipper, FoxPro si Paradox executa motorul de baza de date in principiu pe masina client si foloseste serviciile de fisiere pentru accesul la inregistrari si pentru a obtine controlul spatiului liber.

Alte motoare de baze de date client/server cum sunt Sybase, IBM Database Manager, Ingres, Oracle si Informix aduc nou posibilitatea de a executa cereri SQL emise de la o statie de lucru. Serviciile de fisiere sunt inca folosite pentru a aloca spatiul si servicii de directoare, dar toate celelalte servicii sunt oferite de catre serverul de baze de date.

Dr. Codd a emis 13 reguli care trebuiesc respectate de catre un motor de baza de date pentru a fi compatibil. Iata cateva din standardele la cate trebuie sa se alinieze:

ANSI SQL si IBM DB2

O varietate de aplicatii de nivel inalt

C si COBOL SQL precompilers

Suport pentru: Netware, OS/2, Windows NT, Mac, UNIX

Suport pentru SO client: DOS, Windows, Mac, Unix

Cateva din capabilitatile unei daze de date pentru a asigura o performanta buna este:

Utilitare pentru optimizarea performantei

Anulare tranzactii dinamice

“Roll-back”, “Roll-forward”

Recuperare fisiere auditare

Detectare erori si recuperare

Unelte de reparare

Suport pentru baze de date “mirrored”

Control pentru baze de date distribuite la distanta

Mentenanta pentru acuratete si duplicare fisiere audit.

Intr-o implementare client/server, baza de date trebuie sa ruleze pe server. De aceea motorul bazei de date trebuie sa suporte cereri SQL de la client si sa le execute total pe server, returnand apoi raspunsul celui care a trimis cererea.

Servicii de fax/print/imagine

Imprimantele de inalta calitate, statiile care genereaza faxuri, si plotterele sunt candidati naturali pentru a sustine un server de resurse. Serverul poate accepta intrari de la mai multi clienti, forma coada in functie de prioritatea cererii si rezolvarea ei cand dispozituvul este disponibil.

Serverele de tiparire ofera suport pentru clienti de a primi documente, aranja pentru tiparire, prioritizare a lor. Un server de tiparire eficient va suporta si include modul cum se va comporta in cazul unor probleme fizice de imprimata, notificari client, etc.

Serverele de fax asigura un serviciu similar cu cel de tiparire. In plus, serverele de fax, pot crea cozi de intrare si de iesire pentru o distibutie ulterioara in cazul unor probleme de conexiune sau de aglomerare. Pentru ca faxurile sunt transmise folosind grupa de compresie III sau grupa IV , serverele de fax trebuie sa fie capabile de a comprima sau decomprima in timp real documente pentru a le putea tipari, trimite sau afisa. Acest lucru este posibil printr-o cartela atasata faxului.

Serverele de comunicatie asigura un serviciu de comunicare in retele WAN(wide area network). Acest suport include un subset al IBM SNA, protocoale asincrone, X25,ISDN, TCP/IP, OSI.

Serverele de securitate asigura restrictii de acces pentru software si date accesibile de pe server. Comunicarea este controlata de catre cserverul de comunicare. Folosirea unor nume de utilizator si a unei parole reprezinta minimul de securitate.

Cererea de procesare. Sunt cereri pe care le lanseaza un client catre NOS rezident catre masina client. Aceste cereri sunt impachetate intr-un RPC si trimisa catre nivelul aplicatie al stivei protocolului client. Aceasta cerere este primita de catre nivelul aplicatie.

III.2 Necesitatea de dezvoltare software specializat de retea

Planificarea strategica, dezvoltarea si suportul pentru aplicatiile software este vitala, uneori chiar scumpa, si poate duce a enorme beneficii si reduceri de costuri, timp de prezentare pentru produse noi, customer satisfaction si asa mai departe. Sunt multe oportunitati care infuenteaza si comprima timpul necesar pentru dezvoltarea unei aplicatii – prin folosirea unei strategii unitare . Programele “Total Quality Management” cer ca programele sa fie imbunatatite si dezvoltate continuu. O piata competitiva demonstreaza justa lor valoare.

In practica realizarea unei aplicatii client-server este un lucru care se face destul de usor. Insa extinderea retelelor locale(LAN) de la cateva calculatoare la un parc de cateva zeci sau chiar sute de calculatoare pune probleme in accesarea datelor simultane a mai multor utilizatori. Mai mult utilizatorii pot forma grupuri functionale (de. Ex. Departamente: Tehnic, Contabilitate…etc.) insa dispunerea lor in cadrul retelei sa fie la distanta: ex. o parte din colectivul de la Tehnic sa fie in Ploiesti, o parte in Bucuresti si cealalta parte in Constanta. Toti doresc accesarea datelor ce corespund departamentelor lor.Iata ca programele client trebuie sa aiba capabilitatea de a se integra si comunica intr-o retea extinsa de la LAN la WAN, prin legaturi care sunt destul de diferite ca viteza fiabilitate si care pot avea blocaje sau intreruperi. Aplicatiile trebuie sa stie ce sa faca atunci cand un client a intrerupt legatura (din varii motive) cand incepuse deja sa valideze anumite inregistrari. De asemenea trebuie sa aiba propriul sistem de criptare/decriptate (in afara de autentificarile obisnuite) si pastrare a comenzilor intr-un format care sa permita modificari usoare.

Programatorii de retea trebuie sa cunoasca acele “detalii” ale comunicarii in retea, a tipurilor de interceptare, sau de atacuri asupra informatiei care circula intre client si server. De exemplu se stie ca aplicatia telnet trimite toate comenzile catre server in clar (necriptat) , chiar si autentificarea adica introducerea numelui de utilizator si a parolei se face tot in clar, acest lucru fiind un lucru grav care face ca aceasta comunicatie sa poata fi interceptata.

Prin comunicarea numai a comenzii respective de la client la server si apoi a rezultatului aplicarii comenzii de la server la client traficul intre cele doua masini este redus la minim.

III.2.1. Metode de dezvoltare a sistemelor client/server

Scopul unei asa zise tehnologii este de a descrie un proces prin care o tehnologie poate fi aplicata pentru ca sa poate fi atinse obiectivele propuse. Metodologia trebuie sa descrie procesele implicate de-a lungul intregii vieti al sistemului.

Iata cateva din pasii din metodologia SILC:

Planificarea sistemului

Initializarea planificarii

Culegere de date

Identificarea situatiei curente

Descrierea sistemelor existente

Definire specificatii

Analiza aplicatii si arhitectura de date

Analiza performante tehnice

Pregatire plan de implementare

Pornire proiect

Cerere

Definire relatii in LRP

Initializare proiect

Pregatite faza a doua

Definire arhitectura

Strangere de date

Extindere specificatii la urmatorul nivel

Solutii alternative conceptuale

Dezvoltarea arhitecturii propuse

Selectare produse specifice

Analiza

Strangere date

Dezvoltarea unui model al noii aplicatii de sistem

Definire informatii si specificatii

Pregatire design extern

Proiectare

Post implementare

Suport

III.2.2 Unelte de programare de retea

Astazi sunt disponibile medii de programare cu capabiltati foarte puternice de programare de retea cum sunt:

Delphi Borland ,

Visual Basic

PowerBuilder

Visual C++

Java.

In continuare sunt prezentate cateva din uneltele cela mai cunoscute de programare de retea:

ICONIX PowerTools, este un pachet de aplicatii ce permit dezvoltarea de aplicatii structurate, orientate obiect.

Acest software aduce o suita de conceptein dezvoltarea aplicatiilor client/server , mai multe informatii se pot obtine de la adresa : http://www.biap.com/iconix

Unisys TransIT Open/OLTP este o colectie de unelte de dezvoltare si software de management care ofera module de procesare tranzactii pentru platformele Windows si Windows NT dar si pentru platforme UNIX. Se pot dezvolta foarte repede aplicatii distribuite si scalabile bazate pe standardele existente (X/open si ISO), API de nivel inalt, retele si protocoale. Aceste aplicatii pot amesteca cu usurinta atribute ale diferitelor platforme, UNIX, Windows putand sa integreze si sa sincronizeze multe baze de date prezente pe platforme diferite. Acest software de clasa medie lucreaza foarte bine cu Microsoft sau cu alte aplicatii de dezvoltare si include librarii pentru : C++, C sau COBOL, plus DLL(Dynamic Link Libraries) pentru Windows NT si Windows 9x. De asemnenea pentru plaftormele Windows este disponibil OLE “point-and-click). Pe orice platforma, aceste unelte imbunatatesc accesul la date( exemplu ODBC sa SQL) prin introducerea capabilitatilor cu procesare de tranzactii. Aplicatiile runtime pot asigura replicari pentru servere fara ca acest lucru sa duca la probleme pentru aplicatiile client. Adresa de Internet este: http://www.unisys.com

JAM 7, este un “tool” multiplatforma pentru constructia aplicatiilor distribuite client/server. Este format dintr-un modul grafic pentru desen, si propriul limbaj script numit JPL, un modul Visual de Librarii pentru a permite crearea de obiecte complexe care pot fi partajate ca si ecrane si updatate ca si mostenire. Este format din peste 100 de functii C si diferite alte unelte si utilitare. Aplicatiile dezvoltate in JAM pot rula in peste 100 de platforme nemodificate enumerand doar cateva din acestea: DOS, Windows, Motif, OS/2, Macintosh, VAX, Unix. JAM de asemenea este integrat cu peste 20 de tipuri se servere de baze de date relationale cum sunt: Oracle, Informix, ODBC, DB/2 si altele.

INTERSOLV este unul din liderii pietei de dezvoltare a aplicatiilor client/server. Solutiile dezvoltate se bazeaza pe dezvoltari orientate obiect, sisteme deschise si pe “data warehouse”(baze de date de marimi mari care prin interfete cu diferite platforme pot colecta date din diferite alte baze de date).

Adresa de Internet este http://www.intersolv.com

CS/8000 este unul din sistemele de dezvoltare care se bazeaza pe implementarea metodologiilor in programarea client/server, sisteme expert si arhitecturi speciale de aplicatii client/server.

Cu CS/8000 se poate realiza orice aplicatie client server de orice complexitate. Prin structura sa, CS/8000 prezinta proiectele de lucru sub o forma organizata, avand totodata marele avantaj de a genera in mod automat toata documentatia unui proiect.

Adresa de Internet este: http://www.cs8000.com

CI-Link este un puternic program de dezvoltare situat in clasa de mijloc al aplicatiilor de acest gen, care permite conectari intre baze de date SQL cu baze de date Macintosh. Modulul Ellipse Query este o modul foarte usor de folosit pe platforma Macintosh si Windows.

Adresa de Internet este : http://www.cornut.fr

MAGNA X este o aplicatie de dezvoltare care a revolutionat soft-urile de acest gen din 1990 pana in prezent. Este o aplicatie OLTP de o complexitate medie, care genereaza aplicatii client server concentradu-se mai mult pe dezvoltarea partii de aplicatie server. Partea de aplicatie client poate fi scrisa in orice limbaj incluzand: Power Builder, Visual Basic, Delphi, Java, C sau C++. Daca este folosit PB sau VB atunci se poate folosi “vrajitorul” integrat care automatizeaza construirea aplicatiei fara a scrie linii de cod. Sunt suportate platforme de baze de date ca Oracle, DB/2, Sybase sau Informix.

Dynasty este un adevarat mediu de dezvoltare aplicatii client/server pentru companii. Aduce o reala solutie deschisa, generand cod C adevarat, nativ functie de platforma destinatie. Dintre platformele suportate enumeram: Windows /9x/NT, OS/2, Motif, Macintosh.

Sysdeco este produs de firma Systemator , companie scandinava de software. Aplicatia aduce suport pentru toate etapele de dezvoltare, de la modelarea pana la implementare, testare si intretinere. De asemenea permite conectarea cu diferite servere de baze de date, pe diferite platforme. Printr-o interfata puternica si un dialog grafic foarte bine pus la punct, Systemator aduce un puternic motor de generare prototipuri GUI, facilitand implicarea foarte puternica inca din primele faze ale proiectului. In modulul model designer se pot construi modele abstracte . Modulul “data” este baza aplicatiei fiind folosit pentru generarea structurii bazei de date dar si pentru generarea interfetelor utilizator.

NATSTAR este un mediu de dezvoltare aplicatii client/server care ofera un mediu prietenos bazat orientat pe obiecte.

III.3 Tipuri de servere

Se intalnesc foarte multe tipuri de servere. Cele mai multe aplicatii client/server sunt aplicatii care se inscri in jurul unei baze de date. Cele mai importante tipuri de server sunt, serverele :

de baze de date

fisiere

de calcul

de interogare

O caracteristica majora a majoritatii serverelor este ca ele ruleaza pe sisteme de operare multitasking. In caz contrar partea de multitasking trebuie sa fie asigurata de aplicatia server pentru a permite mai multor utilizatori simultani.

Cateva din avantajele folosirii aplicatiilor client server:

Este un concept care permite statiilor sa fie atat server cat si clienti (in acelasi timp) si sa combine aceste avantaje,

Este foarte flexibil si deschis in special cand se foloseste cu baze de date ce folosesc stocarea unor proceduri de lucru,

Este foarte sigur permitand sa se foloseasca nivele de acces diferite intre statia client si locul de unde acesta citeste sau cere date. Nu se face un acces direct al datelor ci serverul este cel care are drepturi de citire scriere asupra bazei de date critice, urmand ca rezultatele aplicarii cererii trimise de client si aplicate bazei de date sa fie trimise catre client.

Modificarea partii de server nu necesita intotdeauna modificarea partii de client (mai ales atunci cand se folosesc comenzi lansate din consola – exemplu fiind si programul client/server atasat).

Se foloseste puterea de calcul sau interogare a serverului care se presupune ca este o masina puternica(de regula cu un SO multiprocesor), pentru client nefiind necesare decat niste terminale sau PC-uri modeste care primesc deja un raspuns de cantitate mica.

Permite lucrul “on-line” pe aceeasi structura de date a mai multor clienti simultan.

Permite scaderea importantei ca si risc a defectarii oricarui client, pentru ca aplicatia server poate functiona mai departe fara acesta(sau fara unul din ei)

La proiectarea unei aplicatii client/server trebuie sa se tina seama ca cele doua parti sa aiba unul sau mai multe din procesele urmatoare:

Clientul

asigura o interfata cu utilizatorul

interpretarea comenzilor

intrare de date

validare de date

corectare erori

Serverul:

raspunde cererilor clientului

poate deservi mai multi clienti simultan

asigura functionalitati diverse pt. Diferite operatii

permite “record-locking”

gestioneaza resursele

In figura se poate vedea cum serverul poate asigura raspunsuri catre mai multi clienti(aplicatii client) care au solicitat anumite task-uri.

Interfata cu utilizatorul

Aplicatia client gestioneaza interfata cu utilizatorul. Aceasta include afisare ferestre, mouse,, etc.

Interpretare comenzi

Aplicatiile client care permit un limbat bazat pe scripturi, trebuie sa includa si un interpretor de comenzi. Unii clienti trebuie sa aiba capabilitatea de a interpreta parametri si a executa proceduri cand butoanele sunt apasate sau hyperlink-uri selectate. Aceasta poate fi numita interpretare de comenzi.

Intrare de date

Virtual toti clientii trebuie sa aiba un anumit tip de intrare de date. Intrarea de date nu se refera doar la completarea unor forme, ci la orice fel de date intrate in sistem. Un timp de procesare este necesar de fiecare data cand este introdusa o data.

Validare de date

Dupa ce datele sunt introduse intr-o forma, acestea au nevoie de o validare primara. Validarea poate merge pana la a fi sigur daca niste campuri contin niste date de verificat. Validarea se refera si la orice alte verificari facute de client.

Online Help(ajutor imediat)

Majoritatea aplicatiilor inlud si posibilitatea de a obtine asistenta imediata pentru anumite functiuni ale programului

Tratarea erorilor

Sunt multe cazuri in care tratarea erorilor intr-o aplicatie client/server joaca un rol foarte important. Erorile pot aparea din diverse cause , cele mai frecvente sunt: erori de comunicatie, de date, de la echipamente sau alte erori care pot aparea si care trebuie tratate ca atare.

III.4 Configuratii “client-server”

La inceput nu a fost nici un fel de aplicatii client-server. Un terminal simplu(dumb) era legat direct de un computer gazda folosint o linie seriala RS232. Terminalul avea doar o tastatura si un ecran. Ecranul avea capabilitatea de a afisa caractere , cursorul se putea adresa, insa setul de caractere se afla in ROM. Toate aplicatiile rulau pe un singur host.

Tipul “Two-tier” Client Server

Prima generatie de aplicatii client server a fost implementata in doua parti logice. Acesta avea si doua parti logice de asemenea. Aplicatia ra formata din doua module diferite care ruleaza pe calculatoare diferite.

Cantitatea de informatii vehiculata intre client si server determina tipul server-ului “thin” sau “fat”. Modelul “thin” ( subtire) inseamna ca aplicatia client nu are o marime mare si nu ocupa foarte mult din resursele gazdei sale, interactiunea cu utilizatorul se face printr-un GUI. Aplicatiile client” thin” sunt foarte indicate pe calculatoare mai vechi (486, 386) care nu au o putere mare de calcul sau de alta natura(comparativ cu cerintele de astazi).

Nivelul mediu (middleware)

Aplicatia client la aceste tipuri de aplicatii are la baza folosirea unor interfete via API. Cele mai intalnite “middleware” sunt foarte generale si se pot folosi pentru aproape orice tip de aplicatie. Exemple de “middleware”:

TCP/IP

DCE

NetBIOS

Named pipes

LAN Manager

Dezvoltari specifice de “middleware” sunt un nivel deasupra celor de ordin general. Exemple sunt: ODBC pentru servere baze de date, SNMP pentru servere de email, SSL pentru WEB.

Tipul “Three-Tier” Client/Server

Este implementarea care se poate separa in mai mult de doua parti logice.

Schematic aceasta este reprezentata grafic in modelul urmator:

III.5 Protocoale, standarde si sisteme deschise

Comunicatie in retea

Ce este un sistem deschis

Cum un sistem deschis dirijeaza ( face sa functioneze ) reteaua

Ce standarde sunt cerute

Cum sunt dezvoltate standardele pentru protocoale ca TCP / IP

Ce este un protocol

Protocoalele OSI (Open Systems Interconnection)

Comunicatia in retea

Lucrul in retea presupune transmiterea datelor de la un calculator la altul. Acest proces complex poate fi impartit in etape:

Recunoasterea datelor;

Impartirea datelor in blocuri mai usor de manevrat

Adaugarea de informatii fiecarui bloc de date, pentru a

Localiza datele respective

Identifica destinatarul

Adaugarea unor informatii de sincronizare si de verificare a erorilor

Transmiterea datelor in retea

In cadrul fiecare etape, sistemul de operare in retea respecta un set de proceduri stricte, numite protocoale, sau reguli de comportare. Protocoalele contribuie la incheierea cu succes a fiecarei operatii.

Pentru comunicarea intre componentele software sau hardware ale diferitelor producatori, a fost necesara standardizarea protocoalelor. Exista doua seturi principale de standarde :” modelul OSI (Opens Systems Interchange) si o versiune a acestuia, numita Project 802.

O reprezentare clara a acestor modele constituie primul pas in functionarea unei retele.

Sisteme deschise

Nevoia unui standard si a unuia care sa fie disponibil tuturor a fost foarte importanta pentru succesul TCP / IP. Deci, putine cunostinte ajuta la conceperea TCP/IP in perspectiva. Mult mai imporant, sistemele deschise au devenit vitale pe piata competitiva actuala. Termenul de sistem deschis este perceput de multi oameni ca o solutie pentru toate problemele (sa fie inlocuit ocazional de termenul client/server ), dar nici un termen nu este folosit sau inteles cum trebuie. Intelegind ce este un sistem deschis si ceea ce implica acesta conduce la o mai buna constientizare a rolului TCP/IP intr-o retea si intre marile retele cum ar fi Internet. Folosirea standardelor arata ca un protocol ca TCP/IP este acelasi pentru fiecare sistem. Aceasta inseamna ca un PC poate comunica cu un minicomputer care ruleaza TCP / IP fara translatii speciale sau rutine de conversie. Asta inseamna ca o retea intreaga de hardware si sisteme de operare diferite poate lucra cu aceleasi protocoale de retea. Dezvoltarea unui standard nu este un proces fara importanta. Adesea, un singur standard implica mai mult decit un singur document descriind un sistem software. Un standard adesea implica inter-relatii intre diferite protocoale, asa cum face TCP / IP. Se stie ca interactiunile dintre TCP / IP si alte componente ale sistemului de comunicatii sunt importante pentru optimizarea si configurarea potrivita si pentru siguranta ca toate serviciile de care este nevoie sunt disponibile conlucreaza bine..

Ce este un sistem deschis?

Sunt multe definitii ale sistemului de acces. Pentru multi oameni, un sistem deschis este cel mai bine definit ca unul al carei arhitecturi nu este un secret. Descrierea arhitecturii este publicata sau este disponibila tuturor care vor sa construiasca produse pentru o platforma software sau hardware. Aceasta definitie a unui sistem deschis se aplica la fel si pentru hardware si pentru software. Lipsa optiunii in achizitionarea de software si hardware este motivul pentru care companiile au trebuit sa accepte principiile sistemului de acces. Un exemplu de companie care s-a adaptat este Digital Equipment Corporation (DEC). Ei si-au schimbat propriul sistem de operare de pe minicomputerele lor VMS cu un sistem de operare de acces UNIX –M standard. UNIX este un exemplu clasic al unei platforme software de acces. Codul sursa pentru sistemul de operare UNIX a fost inca de la inceput disponibil celor care l-au agreat. Codul sursa al UNIX este usor de inteles si usor de manevrat. UNIX-ul nu este preferat doar pentru trasaturile caracteristice sistemului sau de operare ci si pentru faptul ca un utilizator UNIX poate rula software din alte platforme UNIX, deoarece fisierele sunt compatibile de la un sistem UNIX la altul (exceptind formatul disk). Cresterea utilizarii UNIX-ului a obligat fabricantii de hardware sa produca o versiune de UNIX pentru propriul hardware. Acest pas permit utilizatorilor sa combine diferite sisteme hardware in retele mai mari, toate rulind UNIX-ul si lucrind impreuna.

Protocoalele TCP/IP

Suita protocoalelor TCP/IP asigura suportul pentru a conecta mai multe hosturi, si urmeaza un set de standarde despre cum computerele comunica si cum retelele sunt inter-conectate. Protocoalele TCP/IP respecta conceptul de “4 layer model” numit si modelul DOD respectiv nivelele :

Applicatie

Transport

Internet

Retea

Descrierea layer-elor ce stau la baza protocolului TCP/IP

Prin comunicatiile in sistemele deschise, grupurile sunt destul de evidente. Un grup se ocupa de transportul datelor, un altul cu comprimarea mesajelor , un altul cu aplicatiile utilizatorului final.

Fiecare grup este numit layer.

Layer-ele sunt entitati independente. Ei nu pot realiza de obicei o sarcina fara sa interactioneze cu alte layere. Sunt asteptate reductii ale functionalitatii si sunt propuse citeva cai de acces catre aceasi divizie de layers pentru un protocol de retea. Modelul de referinta de interconectare a sistemelor de acces ( OSI – RM ) foloseste sapte nivele(layere). Arhitectura TCP / IP este similara dar implica numai cinci straturi pentru ca aceasta combina citeva din functionalitatile OSI in doua straturi intr-unul.

Modelul de referinta OSI cu cele 7 layere.

Nivelul aplicatie, prezentare si sesiune sunt toate aplicatii orientate prin faptul ca sunt responsabile pentru presentarea interfetei de aplicare utlizatorului. Cele trei sunt dependente de nivelele(layerele) aflate sub ele si sunt total dedicate mijloacelor prin care datele ajung la aplicatie. Aceste trei nivele se numesc nivele superioare.

Cele patru nivele inferioare se ocupa cu transmiterea de date, acoperind comprimarea, traseul, verificarea si transmisia fiecarui grup de date. Nivelele inferioare nu se ocupa cu tipul de date pe care le primesc sau le trimit aplicatiei, ci are ca sarcina trimiterea acestora. Nivelele inferioare nu fac in nici un fel diferenta intre diverse aplicatii.

Nivelul aplicatie (application layer)

Nivelul aplicatie este interfata end – user la sistemul OSI. Este acolo unde aplicatiile cum ar fi posta electronica, USENET sau module de prezentare baze de date rezida. Sarcina nivelului aplicatie este sa prezinte informatiile primite si sa trimita date noi ale utilizatorului catre nivelele inferioare.

In aplicatiile distribuite, cum ar fi client / siteme server, nivelul aplicatie este acolo unde rezida aplicatia client. Aceasta comunica cu serverul prin layers inferioare. El serveste ca fereastra prin care aplicatiile au acces la serviciile de retea. Acest nivel reprezinta serviciile oferite direct apliicatiilor de utilizator, cum ar fi software pentru tranfer de fisiere, pentru accesul la bazele de date sau pentru posta electronica (e-mail). Nivele inferioare sprijina operatiile efectuate la nivelul aplicatie, acre raspunde de accesul general in retea, controlul fluxului si tratarea erorilor.

Nivelul prezentare (Presentation layer)

Sarcina nivelului prezentare este sa izoleze straturile inferioare de formatul data al aplicatiei. Aceasta converteste datele din aplicatie intr-un format obisnuit, numit adesea reprezentare canonica. Nivelul prezentare proceseaza datele dependente de dispozitiv din nivelul aplicatie intr-un format independent de dispozitiv pentru straturile inferioare.

Statul prezentare este acolo unde formatele fisiere si chiar formatele caracter ( ASCII si EBCDIC ) sunt pierdute. Conversia de la aplicatia format date se ace printr-un “ limbaj de programare in retea comun” (cum acesta este numit in documentele Modelului de Referinta OSI ) care are un format structurat.

Nivelul prezentare gestioneaza conversia de protocoale, conversia si criptarea datelor, modificarea sau conversia setului de caractere, precum si interpretarea comenzilor grafice.

Nivelul prezentare creeaza reversul pentru datele primite.Acestea sunt covertite dintr-un format obisnuit in formate specifice aplicarii, bazate pe tipul de aplicare pentru care dispozitivul are instructiuni. Daca datele intra fara instructiuni reformatate, informatia nu poate fi asamblata intr-o maniera corecta pentru aplicatia utilizatorului.

La acest nivel functioneaza un utilitar numit redirector. Asa cum arata si numele, rolul redirectorului este de a dirija(redirecta) opratiile de intrare /iesirre (I/O) catre resursele de pe un server.

Nivelul sesiune(session layer)

Nivelul sesiune organizeaza si sincronizeaza schimbul de date intre procesele aplicatiei. Aceasta lucreaza cu nivelul aplicatie furnizand seturi de date simple numite puncte de sincronizare care permit unei aplicatii sa stie cum progreseaza receptia si transmisia datelor. In termeni mai simpli, nivelul sesiune poate fi gindit ca un layer de coordonare si flow control. Nivelul sesiune este implicat in comunicatiile coordonatoare intre aplicatii diferite, permitind fiecareia sa stie starea celeilalte. O eroare intr-o aplicatie este corectata de nivelul sesiune permitind aplicatiilor de primire sa stie unde se afla eroarea. Nivelul sesiune poate resincroniza aplicatiile care sunt conectate unele la altele. Aceasta poate fi necesar cind comunicatiile sunt temporar intrerupte sau cind o eroare are loc cauzind pierderea datelor.

Nivelul Transport (transport layer)

Nivelul transport, cum si numele sugereaza este proiectat sa furnizeze “ transferul transparent al datelor de la o sursa cu sistem inchis – deschis la o destinatie cu sistem inchis deschis “ potrivit Modelului de Referinta OSI. Nivelul transport stabileste, mentine si finalizeaza comunicatiile dintre doua mecanisme.

Nivelul transport asigura procesul prin care datele trimise sa se potriveasca cu datele primite.Acest rol de verificator este important deoarece asigura trimiterea corecta a datelor, cu o retrimitere a acestora dac o eroare a fost detectata. El se ocupa cu trimiterea datelor, determinind ordinea si prioritatile acestora. Totodata asigura transportul datelor la destinatie fara erori, in succesiune si fara pierderi sau duplicate. Acest nivel reimpacheteaza mesajele, fragmentandu-le pe cele de mari dimensiuni in mai multe pachete sau concateneaza pachete mai mici intr-un singur pachet eficientizand transmirea lor in retea. La capatul receptor, nivelul transport despacheteaza mesajele, reasamblandu-le in forma originala, si transmite de obicei un semnal de confirmare a primirii.

Nivelul Retea (Network layer)

Nivelul retea furnizeaza ruta fizica a datelor, determinind calea dintre dispozitive. Nivelul retea se ocupa de toate aceste probleme de rute, asistind nivelele superioare din acest punct de vedere.

Nivelul retea examineaza topologia retelei pentru a determina cea mai buna ruta in vederea trimiterii unui mesaj, la fel ca si intelegerea sistemelor de transmisie. Numai el este cel care trimite un mesaj de la sursa la dispozitivul tinta, dirijind alte blocuri de date care trec prin sistem catre alt dispozitiv.

Nivelul legaturii datelor

Nivelul legaturii datelor, potrivit OSI asigura controlul stratului fizic si detecteaza si corecteaza posibilele erori care pot aparea. In practica, "data link layer" este responsabil pentru corectarea erorilor de transmisie induce in timpul transmiterii (ca opuse erorilor din insasi aplicatia de date care sunt rezolvate in nivelul transport).

Stratul legaturii datelor este de obicei legata la semnalul de interferenta de pe agentul de transmisie fizica chiar pe fir de cupru, cablu de fibra optica sau microunde. Interferenta este comuna, rezultind din multe surse, incluzind raze cosmice si interferenta magnetica izolata din alte surse.

Nivelul fizic

Nivelul fizic este cel mai mic strat al modelului OSI si trateaza “ mijloacele mecanice, electrice, functionale si procedurale “ necesare pentru transmiterea datelor, potrivit definitiei OSI. Cind modelul OSI a fost dezvoltat, au aparut multe probleme in legatura cu cele mai joase straturi, deoarece ele sunt, in cele mai multe cazuri, inseparabile. Stratul de legatura al datelor si stratul fizic sunt tratate ca un strat combinat, dar definitia OSI stipuleaza scopuri diferite pentru fiecare.(TCP/IP include stratul de legatura a datelor si stratul fizic ca un strat, recunoscind ca separarea este mai mult academica decit practica ). Fiind cel mai de jos in ierarhia OSI, el transmite un sir de biti “bruti” nestructurat, printr-un mediu fizic(cum ar fi cablul de retea). Nivelul fizic se refera la interfata electrica, optica si mecanica si functionala cu cablul. De asemenea, nivelul fizic transporta semnalele care reprezinta datele generate de nivelele superioare.

Acest nivel defineste modul in care cablul este legat la placa de retea . De exemplu, defineste numarul de pini ai conectorului, precum si functia fiecarui pin. Nivelul fizic este responsabil pentru transmiterea unor siruri de biti(zero si unu) de la un calculator la altul. La acest nivel bitii transmisi nu au o semnificatie. Nivelul defineste codificarea datelor si sincronizarea bitilor, oferind siguranta atunci cand calculatorul emite bitul 1, acesta va fi receptionat drept bit 1 si nu 0. In plus defineste durata unui bit, precum si modul in care fiecare bit este convertit in impulsul electric sau optic corespunzator cablului de retea.

Pachete

Pentru transferul datelor, multe experimente au demonstrat ca la crearea unui bloc uniform de date este de preferat in detrimentul trimiterii caractere in grupuri de marimi variabile si raspindite. De obicei, aceste blocuri de date au citeva informatii inaintea lor numite si antete (header) si uneori un indicator la sfirsitul acestora ("the trailer"). Aceste blocuri de date sunt numite pachete in multe sisteme de comunicatii simultane.

Cantitatea de date dintr-un pachet si compozitia header-ului se pot schimba in functie de protocolul de comunicatii cit si de niste restrictii de sistem, dar conceptul de pachet se refera intotdeauna la un set intreg (incluzind capatul si sfirsitul). Cuvintul pachet este adesea folosit ca o referire la orice grup de date comprimate pentru transmitere. Cum datele unei aplicatii trec prin straturile arhitecturii, fiecare adauga mai multe informatii. Termenul pachet este folosit frecvent la fiecare nivel. Termenul de pachet este folosit in general pentru orice date cu informatii aditionale, in loc de rezultat specific al adaugarii header-ului si trailer-ului unui singur strat.

Subsisteme

Un subsistem este un strat colectiv sau particular dintr-o retea. De exemplu, daca zece calculatoare sunt conectate intre ele, fiecare rulind modelul OSI cu sapte straturi, toate cele zece aplicatii layers sunt aplicatii subsistem, toate cele zece straturi de

legatura dintre date sunt subsisteme de legatura date. Cu Modelul de Referinta OSI sunt sapte subsisteme.

Este posibil ca toate componentele individuale dintr-un sistem sa nu fie active in acelasi timp. Folosind zece calculatoare, numai trei ar putea avea stratul de legatura dintre date activ in orice moment, dar toate zece formeaza subsistemul.

Entitati

Un strat poate avea mai mult decit o parte dintr-o entitate. De exemplu, cablul de transport poate avea rutine care sa verifice sume de control(checksum) la fel ca si rutine care dirijeaza pachete retrimise care n-au fost transferate corect. Aceste rutine nu sunt active imediat pentru ca ele nu ar putea fi solicitate in orice moment. Rutinele active sunt numite entitati. Cuvintul entitate a fost adoptat pentru a gasi un cuvint care n-ar putea fi confundat cu un alt termen cum ar fi modulul, procesul sau sarcina.

Componente TCP / IP

Programul Telnet furnizeaza capabilitatea de logare la distanta. Acesta permite unui user sa se logheze la un alt calculator si sa actioneze ca si cum s-ar afla in fata celui de-al doilea. Conexiunea poate fi facuta pe reteaua locala sau pe alta retea aflata oriunde in lume, atita timp cit utilizatorul are permisiunea sa se logheze la un sistem indepartat.

Se poate utiliza Telnet-ul cind este necesara realizarea unor actiuni pe un alt calculator din tara. Aceasta nu este acceptata decit in context LAN sau WAN , dar citeva sisteme cu accces la Internet permit sesiuni Telnet, in timp ce userii foloses o noua aplicatie sau sistem de operare.

Protocolul transferului de fisiere

Protocoul transferului de fisiere ( FTP ) permite unui fisier sau unui sistem sa fie copiat in alt sistem. Utilizatorul nu se logheaza la alt calculator ca un utilizator cu drepturi depline cum ar face cu programul Telnet dar foloseste in loc programul FTP care-i permite accesul.

Odata ce conectarea la un calculator indepartat a fost stabilit FTP permite copierea unuia sau a mai multor fisiere pe calculatorul personal.( Termenul transfer implica faptul ca fisierul este mutat de la un sistem la altul, cel orginal raminind intact. Fisierele sunt deci copiate). FTP este un serviciu folosit mult pe Internet, la fel ca si pe multe LAN-uri sau WAN-uri.

Protocolul de transfer posta simpla

Protocolul de transfer posta simpla ( SMTP) este folosit pentru transferul postei electronice. SMTP este complet transparent utilizatorului. SMTP se conecteaza la calculatorul indepartat si transfera mesaje postale ca multe fisiere de transfer FTP. SMTP este un protocol care nu creeaza probleme si este foarte folosit.

Kerberos

Kerberos este un protocol de securitate. Kerberos foloseste o aplicatie speciala numita server de autentificare pentru validarea parolei si criptarea sistemelor folosite in comunicatii si este destul de obisnuit in UNIX.

Sistemul nume de domeniu

Sistemul nume de domeniu ( DNS ) permite unui calculator cu nume comun sa fie convertit la o adresa de retea speciala. De exemplu, un PC numit Darkstar nu poate fi accesat de un altul din aceeasi retea ( sau oricare alta retea conectata ) decit daca sunt disponibile niste metode de cautare a numelui calculatorului local si de inlocuire a numelui cu adresa hardware a calculatorului. DNS asigura o conversie de la numele local comun la o adresa fizica unica a dispozitivului conexiunii la retea.

IV. Adresele IP si porturile unei masini:

Adresa IP este un numar pe 32 biti care identifica in mod unic un host (computer sau alt device) intr-o retea TCP/IP. Adresele IP sunt in general scrise sub forma ueni grupari de 4 numere zecimale separate de puncte(asa zisa “dotted separated decimals”), ca de exemplu 24.200.134.24.

Pentru a asigura comunicatia fiecare adresa IP este compusa din doua parti:

adresa de retea – network ID,

adresa de host – host ID.

Pentru a separa aceste adrese se foloseste o masca de biti ex. 255.255.255.0.

In combinatie cu adresa de IP 24.200.134.24 / 255.255.255.0 rezulta ca adresa retelei este 24.200.134.x unde x poate fi cuprins intre 0-254 (reprezentand adresa hostului), cu alte cuvinte exista 254 adrese care se pot aloca pentru subnetul ales.

In cadrul comunicatiei intre doua hosturi via TCP/IP intervin doua aspecte, adresa IP si porturile pe care se face stabileste o sesiune de comunicatie.

Astfel diferite servicii au porturi rezervate (vezi /etc/services sau \Windows\services):

21 – FTP ( file transfer protocol)

23 – Telnet port

25 SMTP (simple mail transfer protocol) – trimitere emailuri

80 – HTTP – hyper text transfer protocol

110 POP3 (Post Office Protocol) – primire emailuri

143 IMAP etc.

Se face o rezervare a acestor porturi pana la 1024, dupa aceea se folosesc porturile pentru initierea diferitelor sesiuni de comunicare(TCP sau UDP).

Inverse look-up sau rezolvarea numelui hostului pe baza adresei IP.

Structura unui packet IP este :

V. Controlul WINSOCK

In cele ce urmeaza este prezentat controlul winsock ca si control folosit in cadrul mediului de programare VisualBasic, mediu utilizat si pentru crearea aplicatiei practice. Acesta are asemanari foarte mari cu controale existente in alte medii do dezvoltare unele dintre acestea fiind chiar identice.

Controlul Winsock, invizibil la utilizator, furnizeazã usor conexiuni intre doua hosturi folosind doua tipuri de protocoale TCP si UDP.

Controlul Winsock se foloseste numai in retele bazate pe suita de protocoale TCP/IP.

Protocolul TCP/IP este un protocol universal compatibil pe computere de la diferiti fabricanti, cu diferite sisteme de operare, permitand acestora comunicarea sigura. Acesta depaseste estimarile initiale ca utilizare mondiala, fiind protocolul pe care se bazeaza comunicarea in reteaua Internet.

Protocolul in sine este privit ca un Open System pentru ca au fost publicate liber toate implementarile sale el cuprinde o suita de protocoale adiacete.

Ca orice protocol de retea acesta este format din layere:

aplicatie: telnet, ftp, email

transport: TCP, UDP

retea: IP, ICMP, IGMP

link: nivel fizic card retea

Responsabilitatile acestor layere sunt dupa cum urmeaza:

Link layer – este numit si layer de date sau layer de retea, si in mod normal include device driverul corespunzator cardului de retea din SO respectiv;

Network Layer – numit si Internet layer are ca rol controlul miscarii pachetelor in retea. Un exemplu este rutarea. IP, ICMP(Internet Control Message Protocol) si IGMP(Internet Group Management protocol) asigura nivelul de retea.

Transport Layer – asigura fluxul de date intre doua hosturi pentru nivelul de dedesupt. Exista doua tipuri de protocoale de transport TCP si UDP(User Datagram Protocol)

Controlul Winsock poate sã fie folosit cu Microsoft Access, Visual Basic, Visual C+ +, sau Visual Foxpro.

Pentru a scrie o aplicatie client sau o aplicatie de server nu este nevoie sa fie folosite detaliile de TCP sau a folosi nivelul de bazã Winsock API. Invocand metodele controlului, se poate cu usurintã sa ne conectam la o masinã de pe Internet, oriunde ar fi aceasta in spatiul public (daca accesul catre IP-ul sau si unul din porturile sale este liber) , prin aceasta putem realiza un schimb de informatii in ambele sensuri.

Aplicatia urmatoare realizeaza acest lucru prin simularea unui server Telnet ce permite o serie de comenzi ce se transmit in final masinii distante.

Protocolul TCP – generalitati

Principiul este foarte simplu utilizand Winsock trebuie doar sa folosim cateva proprietati astfel:

pentru aplicatia client trebuie ca:

sa folosim proprieatea RemoteHost cu IP-ul serverului distant

sa setam RemotePort cu portul folosit pe server;

sa invocam metoda Connect

pentru aplicatia server folosim:

se seteaza LocalPort

se invoca metoda Listen

Cand calculatorul client cere o conexiune, evenimentul ConnectionRequest va fi indeplinit si functie de conditiile de acceptare sau nu se invoca metoda Accept în evenimentul ConnectionRequest.

O datã pe conexiune stabilita orice calculator poate sã expedieze si sã primeascã informatiile. Pentru a expedia informatii, se invoca metoda SendData. Informatia va fi primita de perechea cu care a fost realizata sesiunea respectiva.

Ca o caracteristica protocolul TCP este un protocol bazat pe sesiune ce garanteaza ca pachetele ajung la destinatie intacte.

Protocolul UDP – generalitati.

User Datagram Protocol( UDP) este un protocol de conexiune. Spre deosebire de TCP transmiterea de informati cu protocolul UDP nu are nevoie de o sesiune sigura. De asemenea, o aplicatie UDP poate sã fie ori un client sau un server.

Pentru a transmite informatii, mai întâi aplicatia client trebuie sa aiba configurat portul prin care se va realiza sesiunea cu ajutorul proprietãtii Localport.

Calculatorul(aplicatia) server are nevoie de configurarea proprietatii Remotehost la adresa de Internet a calculatorului clientul, si proprietatea Remoteport la acelasi port ca proprietatea Localport a clientului. Oricare din cele doua aplicatii (server sau client) pot invoca metoda Senddata pentru a începe sã expedieze mesajele. Cealalata aplicatie va folosi metoda Getdata in evenimentul DataArrival pentru a recupera mesajele expediate.

Ca o caracteristica protocolul UDP este un protocol ce nu garanteaza ca pachetele ajung la destinatie intacte, fiind folosit in special acolo unde validarea informatiilor se face la nivelul aplicatiei de baza.

Proprietatile controlului Winsock:

Bytesreceived Property.

Se întoarce cantitatea de informatii primite (în mod curent în primiti tampon).

Se foloseste metoda Getdata pentru a recupera informatiile.

Este RO la momentul proiectarii.

Folosire Winsock.BytesReceived

Intoarce: Long

Proprietatea Index (control ActiveX)

Intoarce sau seteaza numãrul (indexul) care in mod unic identificã un obiect într-o colectie.

Folosire: winsock.Index

Proprietatea Index este setata implicit la creare in ordinea de creare a obiectelor într-o colectie.

Indexul pentru primul obiect într-o colectie va fi întotdeauna 1.

Proprietatea LocalHostName

Intoarce: numele masinii locale(NetBIOS). Este RO si nedisponibila la proiectare.

Sintaxa: winsock.LocalHostName

Intoarce: String

Proprietatea LocalIP

Intoarce IP-ul masinii locale în format ( de adresã IP punctat xxx.xxx.xxx.xxx).

Este RO si nu este disponibila la momentul proiectarii.

Folosire: Winsock.LocalIp.

Proprietatea LocalPort

Intoarce sau seteaza portul local pentru folosire.

Este RW si disponibila la momentul proiectarii.

Pentru client, acesta indicã portul local pentru a trimite informatiile de la sursa la destinatie.

Specificand port 0 aplicatia nu are nevoie de un port specific. În acest caz, controlul va selecta un port aleator. Dupã ce o conexiune este realizata, aceasta este portul local folosit pentru conexiunea TCP.

Pentru server, acesta este portul local pentru a asculta. Dacã este specificat port 0, este folosit un port aleator. Dupã ce invocarea metodei Listen, proprietatea contine portul real care a fost selectat.

Folosire: Winsock. Localport

Intoarce : Long

Proprietatea Name

Intoarce numele folosit in cod pentru a identifica o form, control sau accesa un alt obiect.

Este RO la rulare.

Folosire: Winsock.Name

Remarcã.

Numele implicit pentru obiectele noi este de obicei obiectul plus un întreg unic. De exemplu, primul obiect nou Form este Form1, un obiect nou Mdiform este Mdiform1, si al treilea control Textbox creat pe un formular este Text3.

Proprietatea obiectului Name trebuie sã inceapa cu o literã si sã fie maxim de 40 caractere. El poate sã includã numere si sã contina caracterul de legatura (underscore) dar sã nu includa semne de punctuatie sau spatii.

Formele nu pot avea acelasi nume cu un alt obiect public ca de exemplu Clipboard, Screen, sau App. sau numele unui alt obiect.

Se poate folosi proprietatea formularului Name cu comanda Dim la momentul executiei pentru a crea alte instante ale formularului. Nu pot exista doua formulare cu acelasi nume la design time.

Se poate crea o matrice de controale de acelasi fel setand acelasi nume. De exemplu, când se configureaza numele de toate butoane de optiune într-un grup la Myopt, Visual Basic desemneazã valorile unice la proprietatea Index de fiecare control pentru a îl deosebi de ceilalti în matrice.

Proprietatea Parent

Se întoarce formularul, obiect, sau colectie care contine un control sau un obiect.

Folosire: Winsock.Parent.

Remarcã

Se foloseste proprietatea Parent pentru a accesa accesoriile, metodele, unui pãrinte.

De exemplu:

Mybutton.Parent.Mousepointer =4

Protocol Property( Winsock Control).

Se întoarce sau configureazã protocolul, TCP sau UDP, folosit cu controlul Winsock.

Constanta Valoare Descriere.

scktcpprotocol Implicit. Protocolul TCP.

sckudpprotocol UDP.

Observatii.

Controlul trebuie sã fie închis( folosind metoda Close) înaintea aceasta proprietate sã poatã sã fie sã se initializeze.

Remotehost Property( Activex Controls).

Intoarce sau seteaza numele masinii distanta la care controlul Winsock expedieazã sau primeste o informatii. De exemplu, atunci cand vrem sa ne conectam la o masina distanta putem folosi atat numele “prietenos” al hostului(masinii) respective sau adresa sa unica de IP. De exemplu pentru a folosi serviciul ftp al domeniului microsoft.com , ne vom conecta la :

ftp.microsoft .com sau direct la IP-ul real

RemoteHostIp Property.

Se întoarce IP-ul in format “dotted” al masinii departate.

Pentru aplicatiile de client, dupã ce o conexiune a fost realizata ca urmare a unei metode Connect, aceastã proprietate contine sirul IP al masinii depãrtate.

Pentru aplicatiile de server, dupã ce conexiunea care vine ca si cerere (evenimentul ConnectionRequest), aceastã proprietate contine sirul IP masinii depãrtate care a initiat conexiunea (deci al clientului).

Când folosim protocolul UDP, dupã ce apare evenimentul DataArrival, aceastã proprietate contine IP-ul masinii.

Folosire: Winsock.RemoteHostIp.

Remoteport Property( Activex Controls).

Se întoarce sau configureazã portul depãrtat folosit in sesiunea respectiva.

Folosire : Winsock.RemotePort =.

Remarcã.

Când se foloseste proprietatea Protocol, proprietatea RemotePort este setata în mod automat la portul corespunzãtor implicit pentru fiecare protocol. Numerele de port implicite sunt arãtate în tabel de jos:

Port Descriere

80 HTTP, de obicei folosit pentru conexiunile World Wide Web.

21 FTP. Transfer de fisiere

22 SSH, Remote control sub un mecanism de criptare cu key

23 Telnet

SMTP

Etc.

SocketHandle Property

Returneaza o valoare ce corespunde cu socket-ul pe care controlul il foloseste pentru a comunica cu layer-ul Winsock. Este RO si nu este disponibila decat la run-time dupa realizarea sesiunii.

Sintaxa: Winsock.SocketHandle

Returneaza: Long

Remarca: Aceasta proprietate a fost destinata pentru a fi folosita cu Winsock API.

State Property( Winsock Control).

Se întoarce starea controlului. Este indisponibila la momentul proiectarii.

Folosire: Winsock.State.

Returneaza: Integer

Valorile pentru proprietatea State sunt:

Index Property( Activex Controls).

Intoarce sau seteaza un control array.

METODE controlului Winsock

Accept Method.

Pentru aplicatiile de server de TCP numai. Aceastã metodã are ca rol sa accepte conexiunea care este in curs si apare intr-un eveniment ConnectionRequest.

Folosire: Winsock.Accept Requestid.

Intrare: Long

Intoarce: Void

Observatii.

Metoda Accept este folositã în evenimentul ConnectionRequest. Evenimentul ConnectionRequest are ca argument corespondent, parametrul RequestId, care ar trebui sã fie preluat la metoda Accept.

Close Method( Winsock Control).

Inchide o conexiune TCP sau un Listen socket pentru ambii clienti

Folosire: Winsock.Close

Argumente: fara

Intoarce: Void

Getdata Method( Activex Controls).

Se întoarce informatia din memoria tampon de la obiectul Clipboard.

Nu are argumente.

GetData Method(Winsock Control)

Intoarce blocul curent de date si il pastreaza intr-o variabila

Folosire: Winsock.GetData data, [type,] [maxLen]

GetData are urmatoarele parti:

Alte setari

Valori pentru tipul typefor type are:

Listen Method.

Creeazã o sesiune in cadrul unei aplicatii server. Metoda Listen este valabila numai pentru conexiunile de tip TCP.

Folosire: Winsock.Listen

Argumente: nu

Intoarce: Void

VI. Parte practica

Structura aplicatiei

Aplicatia de Windows Telnet Server

Rolul programului

Aplicatia Extel este un program folosit pentru rularea unor comenzi pe calculatoare distante ce comunica prin protocolul TCP/IP.

Cele doua masini trebuie ca sa aiba portul folosit de telnet liber (nu trebuie sa existe pe masina distanta alt server de Telnet).

Conectarea la aplicatia server se poate face de pe orice platforma fie ea : Windows, Unix sau alta platforma ce are implementat un client de telnet si foloseste protocolul TCP/IP.

Serverul este realizat in Visual Basic versiunea 6.0, si foloseste controlul winsock ce este livrat cu aceasta versiune. Pentru instalare se va folosi kit-ul de instalare obtinut prin “deployment-ul” aplicatiei.

Iata o fereastra tipica pentru un client Telnet Windows oarecare, care incearca o conexiune cu aplicatia practica.

Aplicatia a fost numita ExTel (ExtendedTelnet Server). La conectarea cu un client pe portul telnet 23, serverul raspunde cu mesajul : “Enter login ID”.

Dupa introducerea numelui de utilizator, va fi ceruta parola care nu va aparea in clar la tastare. Daca procesul de autentificare este corect atunci serverul va returna un presudo prompter(initial calea in care se afla aplicatia).

Regula va fi simpla – toate comenzile trimise catre server vor fi cautate intr-o lista predefinita de comenzi, celelalte incercand a fi interpretate ca programe executabile, ducand la incercarea de lansare in executie a acestora. Daca lansarea in executie este facuta cu succes atunci se va returna PID-ul procesului respectiv.

In anexa 1 este prezentat listingul aplicatiei practice.

Caracteristici :

foloseste pentru comunicare protocolul TCP/IP

foloseste portul 23 (telnet) pentru server

aplicatia nu porneste daca pe acest port exista deja o alta aplicatie

este monosesiune (permite unei singure masini, la un moment dat sa se conecteze si sa execute comenzi),

log-on-ul se face cu autentificare de tip user/parola

autentificarea se face in clar

Avantajele folosirii RAS

Prin intermediul unei conexiuni RAS, se pot obtine avantaje cum ar fi:

controlul masinii de la distanta prin rularea unor diferite programe

controlul proceselor (cu posibilitatetea fortarii terminarii lor)

controlul statiei (logoff, shutdown, restart)

vizualizarea diferitelor log-uri

cautarea unor fisiere

lansarea unor utilitare de intretinere

controlul din orice zona a lumii in cazul unei conexiuni la Internet sau din orice zona a retelei locale sau a altei retele in cazul unor interconectari cu alte retele in cazul cand masinile pot fi vizibile (exista rutari ale pachetelor dispre o retea catre alta)

Pericolele unor programe in securitatea unei masini

De-a lungul timpului au fost create multe programe pentru controlul unei masini de la distanta, cu avantajele enumerate mai devreme, insa uneori exista pericolul ca aceste programe sa fie ascunse in aplicatii care fac de obicei cu tottul altceva.

De exemplu, o aplicatie gratuita permite vizualizarea tuturor tipurilor de fisiere grafice, insa pe langa acest lucru aceasta aplicatie la anumite momente poate declansa(folosind ca trigger existenta conexiunii la Internet) partea de aplicatie care permite fara ca utilizatorul sa stie conectarea de catre persoane straine(fie ele cei care au elaborat programul) si sustragerea de informatii sau chiar simpla scanare a discurilor utilizatorilor. Aceste programe sunt cunoscute ca si cai-troieni.

Utilizatorul trebuie sa cunoasca aceste posibilitati de patrundere in calculatoarele proprii prin audit-uri asupra starii tuturor porturilor deschise la un moment dat, fie prin instalarea unor filtre numite si firewall-uri.

Platforma Windows este cunoscuta prin extrem de slaba gestiune a programelor care pot deschide/folosi aceste porturi incat instalarea unor aplicatii third-party este absolut necesara.

Firewall necesar in comunicatii intre retele

VII. Concluzii

Folosirea tehnologiei client/server aduce scaderea costurilor globale in administrarea diferitelor servere sau servicii, permitand atat un control centralizat cat mai ales un control pe masura nevoilor din orice punct al retelei.

Anexa

Listing Aplicatie

FORMA

Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Boolean

Dim UserID As String

Dim Password As String

Dim AcceptedId As Boolean

Dim SuccessLoging As Boolean

Dim UserCommand As String

Dim SaveMode As Boolean

Private Sub InitVariable()

Prompt = "C:\"

pwd = App.Path

Prompt = pwd + " "

End Sub

Private Sub cmdDespreAplicatie_Click()

MsgBox "Telnet Server, monouser", vbOKOnly, "Telnet server/monouser"

End Sub

Private Sub cmdDespreAutor_Click()

MsgBox "Cristian Nica – PUI", vbOKOnly, "Telnet server/monouser"

End Sub

Private Sub cmdInchide_Click()

End

End Sub

Private Function cor_str(s As String) As String

If Right$(s, 1) = "\" Then

cor_str = s

Else

cor_str = s + "\"

End If

End Function

Private Sub Form_Load()

Winsock1.LocalPort = 23

Winsock1.Listen

UserID = ""

Password = ""

UserCommand = ""

AcceptedId = False

SuccessLoging = False

InitVariable

End Sub

Private Sub List1_Click()

Dim buffer

buffer = List1.List(List1.ListIndex)

MsgBox Mid$(buffer, 1, Len(buffer) – 5)

MsgBox FindWindow(vbNullString, Mid$(buffer, 1, Len(buffer) – 5))

AppActivate Mid$(buffer, 1, Len(buffer) – 5)

End Sub

Private Sub Winsock1_Close()

Winsock1.Close

Winsock1.LocalPort = 23

Winsock1.Listen

UserID = ""

Password = ""

UserCommand = ""

AcceptedId = False

SuccessLoging = False

lblRemoteIP.Caption = "no connection…"

End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)

If Winsock1.State <> sckClosed Then Winsock1.Close

Winsock1.Accept requestID

Winsock1.SendData "––/// WELCOME to ExtTel \\\––" & vbCrLf

Winsock1.SendData "ExtTel este un server TELNET monouser" & vbCrLf

Winsock1.SendData "conexiunea primita de la: " & Winsock1.RemoteHostIP & " este acceptata." & vbCrLf & vbCrLf

Winsock1.SendData "Enter LoginID: "

lblRemoteIP.Caption = Winsock1.RemoteHostIP

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim str1 As String

Dim MyName As String

Dim dirlist() As String

Dim DirPointer As Integer

Dim ii As Integer

Dim cmd As String, par1 As String, par2 As String

Dim poz1 As Integer, poz2 As Integer

Dim rezult As Double, vb_type As String

Dim spatii_albe As Integer

Dim cls As Class1, xxx As Integer, i As Integer

Dim buffer As String

Dim bucata As String * 4096

Dim temp As Double, dd As Integer

Dim total_bytes As Double, total_fisier As Double

Dim calefis As String

On Error GoTo eroare

Winsock1.GetData str1

If SuccessLoging Then

If Asc(str1) = 13 Then

'folosesc spatiu ca separator

poz1 = InStr(1, UserCommand, " ")

poz2 = InStr(poz1 + 1, UserCommand, " ")

If poz1 <> 0 Then

If poz2 <> 0 Then

cmd = Mid$(UserCommand, 1, poz1 – 1)

par1 = Trim(Mid$(UserCommand, poz1, poz2 – poz1))

par2 = Trim(Mid$(UserCommand, poz2, Len(UserCommand) – poz2 + 1))

Else

cmd = Mid$(UserCommand, 1, poz1 – 1)

par1 = Trim(Mid$(UserCommand, poz1 + 1, Len(UserCommand) – poz1 + 1))

End If

Else

cmd = UserCommand

End If

If cmd = "scandisk" Then

rezult = Shell(cmd, vbNormalFocus)

Sleep (2000)

SendKeys ("~")

Winsock1.SendData vbCrLf & "executat cu PID:" & rezult & vbCrLf & Prompt

ElseIf cmd = "ping" Then

PingHost (par1)

ElseIf cmd = "format" Then

rezult = Shell("format.com a:\", vbNormalFocus)

Winsock1.SendData vbCrLf & rezult

ElseIf cmd = "wordpad" Then

rezult = Shell("c:\program files\accessories\wordpad.exe", vbNormalFocus)

Winsock1.SendData vbCrLf & rezult

ElseIf cmd = "listtask" Then

FillTaskListBox Form1.List1, False

Winsock1.SendData vbCrLf

For i = 0 To List1.ListCount – 1

spatii_albe = 3 – Len(CStr(i))

Winsock1.SendData i & Space$(spatii_albe) & List1.List(i) & vbCrLf

Next i

ElseIf cmd = "killtask" Then

If IsNumeric(par1) Then

CloseWindow (par1)

Else

Winsock1.SendData vbCrLf & "numerical value expected…" & vbCrLf

End If

ElseIf cmd = "activate" Then

If IsNumeric(par1) Then

buffer = Form1.List1.List(par1)

AppActivate Mid$(buffer, 1, Len(buffer) – 5)

End If

ElseIf cmd = "fdisk" Then

rezult = Shell("fdisk", vbNormalFocus)

Winsock1.SendData vbCrLf & rezult

ElseIf cmd = "mkdir" Or cmd = "md" Then

MkDir cor_str(pwd) & par1

Winsock1.SendData vbCrLf & cor_str(pwd) & par1

ElseIf cmd = "cat" Or cmd = "type" Then

Winsock1.SendData vbCrLf

If Mid(par1, 2, 1) = ":" Then

calefis = par1

Else

calefis = pwd + "\" + par1

End If

If Dir(calefis, vbNormal) <> "" Then

'verifica cale root

Open calefis For Binary As #1

buffer = Input(4196, 1)

Winsock1.SendData buffer: Close #1

Else

Winsock1.SendData vbCrLf & "ma tem ca fisierul " & UCase$(calefis) & " nu exista…" & vbCrLf

End If

Winsock1.SendData vbCrLf

ElseIf cmd = "del" Or cmd = "rm" Or cmd = "remove" Then

If par1 <> "" Then

Kill par1

Winsock1.SendData vbCrLf & "fisier sters" & vbCrLf

Else

Winsock1.SendData vbCrLf & "folositi: del path+nume_fisier…" & vbCrLf

End If

ElseIf cmd = "trimite" Then

SendKeys par1, True

Winsock1.SendData "Am trimis " & par1 & vbCrLf

ElseIf cmd = "search" Then

Winsock1.SendData vbCrLf

Call FileSearch(par1, par2, False)

Winsock1.SendData vbCrLf

ElseIf cmd = "ftp" Then

rezult = Shell(cmd & " " & par1, vbNormalFocus)

Winsock1.SendData vbCrLf & "executat cu PID:" & rezult & vbCrLf & Prompt

ElseIf cmd = "cd" Then

If Mid$(par1, 2, 1) = ":" Then

If Dir(par1, vbDirectory) <> "" Then

pwd = cor_str(par1)

Prompt = pwd + " "

End If

Else

If Dir(cor_str(pwd) + par1, vbDirectory) <> "" Then

pwd = cor_str(pwd) + par1

Prompt = pwd + " "

End If

End If

Winsock1.SendData vbCrLf & "Director curent: " & pwd

ElseIf Trim(cmd) Like "exit" Then

Winsock1_Close

cmd = ""

ElseIf Trim(cmd) Like "pwd" Then

Winsock1.SendData vbCrLf & "Directory is: " & pwd & vbCrLf

cmd = ""

ElseIf Trim(cmd) Like "time" Then

Winsock1.SendData vbCrLf & Time & vbCrLf

Winsock1.SendData Prompt

cmd = ""

ElseIf Trim(cmd) Like "help" Then

Winsock1.SendData "Lista comenzi:" & vbCrLf

buffer = ""

buffer = buffer & vbCrLf & "scandisk format date"

buffer = buffer & vbCrLf & "wordpad fdisk mkdir"

buffer = buffer & vbCrLf & "cat type del"

buffer = buffer & vbCrLf & "rm remove cat type"

buffer = buffer & vbCrLf & "trimite search ftp"

buffer = buffer & vbCrLf & "cd exit pwd"

buffer = buffer & vbCrLf & "time help gethostname"

buffer = buffer & vbCrLf & "shutdown reboot logoff"

buffer = buffer & vbCrLf & "dir ls minimizeaza"

buffer = buffer & vbCrLf & "listtask killtask activate"

buffer = buffer & vbCrLf & "maximizeaza"

Winsock1.SendData buffer & vbCrLf

cmd = ""

ElseIf Trim(cmd) Like "gethostname" Then

Winsock1.SendData "Retrieved : " & Winsock1.LocalHostName

cmd = ""

ElseIf Trim(cmd) Like "shutdown" Then

Winsock1.SendData "Shutting down…"

Call ExitWindowsEx(1, 0)

ElseIf Trim(cmd) Like "reboot" Then

Winsock1.SendData "Rebooting…"

Call ExitWindowsEx(2, 0)

ElseIf Trim(cmd) Like "format" Then

Winsock1.SendData "Formatting…"

ElseIf Trim(cmd) Like "minimizeaza" Then

Winsock1.SendData "Minimizeaza…"

Me.WindowState = 1

ElseIf Trim(cmd) Like "maximizeaza" Then

Winsock1.SendData "Maximizeaza…"

Me.WindowState = 0

ElseIf Trim(cmd) Like "logoff" Then

If SaveMode = True Then

Winsock1.SendData "This command is currently unavailable"

Else

Winsock1.SendData "Log Off…"

Call ExitWindowsEx(0, 0)

End If

ElseIf cmd Like "dir*" Or cmd Like "ls*" Then

If Len(par1) >= 3 Then

If Right$(par1, 1) <> "\" Then par1 = par1 + "\"

par1 = Mid$(cmd, 4, Len(par1) – 3)

Else

par1 = pwd

If Right$(par1, 1) <> "\" Then par1 = par1 + "\"

End If

Winsock1.SendData vbCrLf & "Listare continut pt.: " & par1 & vbCrLf

DirPointer = 1

par1 = Trim(par1)

MyName = Dir(par1, vbDirectory)

Do While MyName <> ""

On Error Resume Next

If MyName <> "." And MyName <> ".." Then

If (GetAttr(par1 & MyName) And vbDirectory) = vbDirectory Then

vb_type = "dir"

Else

vb_type = "file – " & FileLen(cor_str(pwd) + MyName)

End If ' este director !

ReDim Preserve dirlist(1 To DirPointer)

spatii_albe = 25 – Len(MyName)

dirlist(DirPointer) = MyName & Space(spatii_albe) & vb_type

total_bytes = total_bytes + FileLen(cor_str(pwd) + MyName)

DirPointer = DirPointer + 1

End If

MyName = Dir

Loop

For ii = 1 To DirPointer – 1

Winsock1.SendData dirlist(ii) & vbCrLf

Next

Winsock1.SendData "total_bytes = " & total_bytes & " bytes" & vbCrLf & Prompt 'Display the prompt

cmd = ""

Else 'n-am gasit nici o commanda din acele specificate

On Error Resume Next

If Trim(cmd) <> "" Then

rezult = Shell(cmd, vbNormalFocus)

If rezult = 0 Then

Winsock1.SendData vbCrLf & "error starting program…." & vbCrLf & Prompt

Else

Winsock1.SendData vbCrLf & "executat cu PID:" & rezult & vbCrLf & Prompt

End If

cmd = ""

End If

Winsock1.SendData vbCrLf & Prompt

End If

cmd = "": UserCommand = ""

Else

Winsock1.SendData str1

UserCommand = UserCommand + str1

End If

Else '<> #13

If AcceptedId And Asc(str1) = 13 Then

Winsock1.SendData vbCrLf & "Verifying your login information…." & vbCrLf

If UserID = "cris" And Password = "cris" Then

Winsock1.SendData "Telnet server " & vbCrLf & vbCrLf & Prompt

SuccessLoging = True

Else

AcceptedId = False

UserID = ""

Password = ""

Winsock1.SendData "Enter LoginID : "

Exit Sub

End If

ElseIf Asc(str1) = 13 Then

Winsock1.SendData str1 & "Enter Password:"

AcceptedId = True

Exit Sub

ElseIf Not AcceptedId Then

Winsock1.SendData str1

End If

If AcceptedId Then

Password = Password & str1

Else

UserID = UserID & str1

End If

End If

Exit Sub

eroare: Winsock1.SendData vbCrLf & Err.Description & vbCrLf

cmd = "": par1 = "": par2 = ""

Winsock1.SendData vbCrLf & Prompt

Resume Next

End Sub

MODULE

Global Prompt As String

Global pwd As String

Dim s As Integer

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Private Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long

Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long

Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Declare Function SwapMouseButton& Lib "user32" (ByVal bSwap As Long)

Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Public Declare Function GetWindowsDirectory Lib "kernel32.dll" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Const WM_CLOSE = &H10

Private Const LB_ADDSTRING = &H180

Private Const LB_SETITEMDATA = &H19A

Public Function FillTaskListBox(lst As ListBox, How) As Long

On Error GoTo ERROR_FillTaskListBox

lst.Clear

Call EnumWindows(AddressOf EnumWindowsProc, lst.hWnd)

FillTaskListBox = lst.ListCount

GoTo END_FillTaskListBox

ERROR_FillTaskListBox:

Debug.Assert Err = 0

END_FillTaskListBox:

On Error Resume Next

End Function

Private Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Long

On Error GoTo ERROR_EnumWindowsProc

Static WindowText As String

Static nRet As Long

Static ICount As Integer

If IsWindowVisible(hWnd) Then

If GetParent(hWnd) = 0 Then

If GetWindowLong(hWnd, GWL_HWNDPARENT) = 0 Then

WindowText = Space$(256)

nRet = GetWindowText(hWnd, WindowText, Len(WindowText))

If nRet Then

ICount = ICount + 1

WindowText = Left$(WindowText, nRet) & " PID=" & hWnd

nRet = SendMessage(lParam, LB_ADDSTRING, 0, ByVal WindowText)

Call SendMessage(lParam, LB_SETITEMDATA, nRet, ByVal hWnd)

End If

End If

End If

End If

EnumWindowsProc = True

GoTo END_EnumWindowsProc

ERROR_EnumWindowsProc:

Debug.Assert Err = 0

END_EnumWindowsProc:

On Error Resume Next

End Function

Sub CloseWindow(index As Integer)

On Error GoTo ERROR_CloseWindow

If index < 0 Or index > Form1.List1.ListCount Then Exit Sub

strwin = Mid$(Form1.List1.List(index), 1, Len(Form1.List1.List(index)) – 5)

Dim winHwnd As Long

Dim RetVal As Long

winHwnd = FindWindow(vbNullString, strwin)

If winHwnd <> 0 Then

RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)

If RetVal = 0 Then

Form1.Winsock1.SendData "Error_Closing," & "Error closing " & strwin & "."

Else

Form1.List1.RemoveItem (index)

End If

Else

Form1.Winsock1.SendData "Not_Open," & strwin & " is not open."

End If

GoTo END_CloseWindow

ERROR_CloseWindow:

Debug.Assert Err = 0

END_CloseWindow:

On Error Resume Next

End Sub

Public Function Fisier(str As String) As Boolean

On Error GoTo ERROR_Fisier

Fisier = Len(Dir(str)) <> 0

GoTo END_Fisier

ERROR_Fisier:

Debug.Assert Err = 0

END_Fisier:

On Error Resume Next

End Function

Sub PingHost(strAddress As String)

On Error GoTo ERROR_PingHost

Dim PINGit As Class1, Result As Boolean

Set PINGit = New Class1

Result = PINGit.DoPing(strAddress)

If Result Then

Form1.Winsock1.SendData "….Host " & PINGit.LastIP & " is online." & vbCrLf

Else

Form1.Winsock1.SendData vbCrLf & "…Unable to establish a connection with " & strAddress & vbCrLf & "The user is either offline or unavailable." & vbCrLf

End If

GoTo END_PingHost

ERROR_PingHost:

Debug.Assert Err = 0

END_PingHost:

On Error Resume Next

End Sub

Private Sub roteste()

If s = 0 Then

Form1.Winsock1.SendData "-" & Chr(8)

ElseIf s = 1 Then

Form1.Winsock1.SendData "\" & Chr(8)

ElseIf s = 2 Then

Form1.Winsock1.SendData "|" & Chr(8)

ElseIf s = 3 Then

Form1.Winsock1.SendData "/" & Chr(8)

ElseIf s = 4 Then

Form1.Winsock1.SendData "-" & Chr(8)

End If

s = s + 1

If s = 5 Then s = 0

End Sub

Public Sub FileSearch(DrivePath As String, Ext As String, Dirs As Boolean)

On Error GoTo eroare

Dim XDir() As String

Dim TmpDir As String

Dim NormalFiles As String, SysFiles As String, HidFiles As String

Dim DirCount As Integer

Dim X As Integer

Dim Data_FileName() As String

Dim Data_Num_Dirs

Dim Data_Num_Files

Dim lista As Double

DirCount = 0: lista = 0

ReDim XDir(0) As String

XDir(DirCount) = ""

If Right(DrivePath, 1) <> "\" Then

DrivePath = DrivePath & "\"

End If

DoEvents

TmpDir = Dir(DrivePath, vbDirectory)

If Dirs Then

Form1.Winsock1.SendData DrivePath & NormalFiles

lista = lista + 1

Data_Num_Dirs = lista

ReDim Preserve Data_FileName(Data_Num_Dirs + 1)

Data_FileName(Data_Num_Dirs) = DrivePath & NormalFiles

End If

Do While TmpDir <> ""

If TmpDir <> "." And TmpDir <> ".." Then

If (GetAttr(DrivePath & TmpDir) And vbDirectory) = vbDirectory Then

XDir(DirCount) = DrivePath & TmpDir & "\"

DirCount = DirCount + 1

ReDim Preserve XDir(DirCount) As String

End If

End If

TmpDir = Dir

Loop

If Not Dirs Then

NormalFiles = Dir(DrivePath & Ext, vbNormal)

Do Until NormalFiles = ""

ReDim Preserve Data_FileName(Data_Num_Files + 1)

Data_FileName(Data_Num_Files) = DrivePath & NormalFiles

lista = lista + 1

Form1.Winsock1.SendData Data_FileName(Data_Num_Files) & vbCrLf

NormalFiles = Dir

i = i + 1

Data_Num_Files = i

Loop

End If

For X = 0 To (UBound(XDir) – 1)

If Dirs Then

FileSearch XDir(X), Ext, True

Else

FileSearch XDir(X), Ext, False

End If

Next X

Call roteste

Exit Sub

eroare:

End Sub

CLASS

Option Explicit

Private Const IP_STATUS_BASE = 11000

Private Const IP_SUCCESS = 0

Private Const IP_BUF_TOO_SMALL = (IP_STATUS_BASE + 1)

Private Const IP_DEST_NET_UNREACHABLE = (IP_STATUS_BASE + 2)

Private Const IP_DEST_HOST_UNREACHABLE = (IP_STATUS_BASE + 3)

Private Const IP_DEST_PROT_UNREACHABLE = (IP_STATUS_BASE + 4)

Private Const IP_DEST_PORT_UNREACHABLE = (IP_STATUS_BASE + 5)

Private Const IP_NO_RESOURCES = (IP_STATUS_BASE + 6)

Private Const IP_BAD_OPTION = (IP_STATUS_BASE + 7)

Private Const IP_HW_ERROR = (IP_STATUS_BASE + 8)

Private Const IP_PACKET_TOO_BIG = (IP_STATUS_BASE + 9)

Private Const IP_REQ_TIMED_OUT = (IP_STATUS_BASE + 10)

Private Const IP_BAD_REQ = (IP_STATUS_BASE + 11)

Private Const IP_BAD_ROUTE = (IP_STATUS_BASE + 12)

Private Const IP_TTL_EXPIRED_TRANSIT = (IP_STATUS_BASE + 13)

Private Const IP_TTL_EXPIRED_REASSEM = (IP_STATUS_BASE + 14)

Private Const IP_PARAM_PROBLEM = (IP_STATUS_BASE + 15)

Private Const IP_SOURCE_QUENCH = (IP_STATUS_BASE + 16)

Private Const IP_OPTION_TOO_BIG = (IP_STATUS_BASE + 17)

Private Const IP_BAD_DESTINATION = (IP_STATUS_BASE + 18)

Private Const IP_ADDR_DELETED = (IP_STATUS_BASE + 19)

Private Const IP_SPEC_MTU_CHANGE = (IP_STATUS_BASE + 20)

Private Const IP_MTU_CHANGE = (IP_STATUS_BASE + 21)

Private Const IP_UNLOAD = (IP_STATUS_BASE + 22)

Private Const IP_ADDR_ADDED = (IP_STATUS_BASE + 23)

Private Const IP_GENERAL_FAILURE = (IP_STATUS_BASE + 50)

Private Const MAX_IP_STATUS = IP_STATUS_BASE + 50

Private Const IP_PENDING = (IP_STATUS_BASE + 255)

Private Const PING_TIMEOUT = 10000

Private Const WSADESCRIPTION_LEN = 256

Private Const WSASYSSTATUS_LEN = 256

Private Const WSADESCRIPTION_LEN_1 = WSADESCRIPTION_LEN + 1

Private Const WSASYSSTATUS_LEN_1 = WSASYSSTATUS_LEN + 1

Private Const SOCKET_ERROR = -1

Private Type IP_OPTION_INFORMATION

TTL As Byte

Tos As Byte

Flags As Byte

OptionsSize As Byte

OptionsData As Long

End Type

Private Type ICMP_ECHO_REPLY

Address As Long

Status As Long

RoundTripTime As Long

DataSize As Integer

Reserved As Integer

DataPointer As Long

Options As IP_OPTION_INFORMATION

Data As String * 128

End Type

Private Type Inet_Address

Byte4 As String * 1

Byte3 As String * 1

Byte2 As String * 1

Byte1 As String * 1

End Type

Private Type hostent

h_name As Long

h_aliases As Long

h_addrtype As Integer

h_length As Integer

h_addr_list As Long

End Type

Private Type tagWSAData

wVersion As Integer

wHighVersion As Integer

szDescription As String * WSADESCRIPTION_LEN_1

szSystemStatus As String * WSASYSSTATUS_LEN_1

iMaxSockets As Integer

iMaxUdpDg As Integer

lpVendorInfo As String * 200

End Type

Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long

Private Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long

Private Declare Function IcmpSendEcho Lib "icmp.dll" (ByVal IcmpHandle As Long, ByVal DestinationAddress As Long, ByVal RequestData As String, ByVal RequestSize As Integer, RequestOptions As IP_OPTION_INFORMATION, ReplyBuffer As ICMP_ECHO_REPLY, ByVal ReplySize As Long, ByVal Timeout As Long) As Long

Private Declare Function WSAStartup Lib "wsock32" (ByVal wVersionRequested As Integer, lpWSAData As tagWSAData) As Integer

Private Declare Function WSACleanup Lib "wsock32" () As Integer

Private Declare Function inet_addr Lib "wsock32.dll" (ByVal addr As String) As Long

Private Declare Function inet_ntoa Lib "wsock32.dll" (ByVal addr As Long) As Long

Private Declare Function GetHostByName Lib "wsock32.dll" Alias "gethostbyname" (ByVal HostName As String) As Long

Private Declare Function GetHostName Lib "wsock32.dll" Alias "gethostname" (ByVal HostName As String, HostLen As Long) As Long

Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Any) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal cb&)

Private IPLong As Inet_Address

Public Event PingError(peErrDescription As String)

Private m_lastIP As String

Public Event PingOK(poSpeed As Long)

Public Function DoPing(ByVal HostAddress As String) As Boolean

Dim hFile As Long

Dim lRet As Long

Dim lIPAddress As Long

Dim strMessage As String

Dim pOptions As IP_OPTION_INFORMATION

Dim pReturn As ICMP_ECHO_REPLY

Dim iVal As Integer

Dim pWsaData As tagWSAData

Dim buffsize As Long

Dim TTL As Byte

buffsize = 128

TTL = 255

strMessage = "ICMP ECHO DATA"

iVal = WSAStartup(&H101, pWsaData)

lIPAddress = inet_addr(ICMPGetHostByName(HostAddress))

hFile = IcmpCreateFile()

pOptions.TTL = TTL

lRet = IcmpSendEcho(hFile, lIPAddress, strMessage, Len(strMessage), pOptions, pReturn, Len(pReturn), PING_TIMEOUT)

If lRet = 0 Then

DoPing = False

RaiseEvent PingError("PING failure! Error = " & pReturn.Status)

Else

If pReturn.Status <> 0 Then

DoPing = False

RaiseEvent PingError("PING failure! Error = " & pReturn.Status)

Else

DoPing = True

RaiseEvent PingOK(pReturn.RoundTripTime)

End If

End If

lRet = IcmpCloseHandle(hFile)

iVal = WSACleanup()

End Function

Public Function ICMPGetHostByName(Host As String) As String

Dim szString As String

Dim PointerToPointer As Long

Dim hostent As hostent

Dim ListAddress As Long

Dim ListAddr As Long

Dim Address As Long

szString = String(64, &H0)

Host = Host + Right$(szString, 64 – Len(Host))

PointerToPointer = GetHostByName(Host)

If PointerToPointer = -1 Then

ICMPGetHostByName = "0"

Else

If PointerToPointer <> 0 Then

CopyMemory hostent.h_name, ByVal PointerToPointer, Len(hostent) ' Copy Winsock structure to the VisualBasic structure

ListAddress = hostent.h_addr_list ' Get the ListAddress of the Address List

CopyMemory ListAddr, ByVal ListAddress, 4 ' Copy Winsock structure to the VisualBasic structure

Dim barray(128) As Byte

CopyMemory barray(1), ByVal ListAddr, 32

Dim i As Integer

CopyMemory Address, ByVal ListAddr, 4 ' Get the first list entry from the Address List

m_lastIP = vbInet_Ntoa(Address)

Else

m_lastIP = "Not There"

End If

End If

ICMPGetHostByName = m_lastIP

End Function

Public Function vbInet_Ntoa(ByVal Address As Long) As String

On Error GoTo error

CopyMemory IPLong, Address, 4

vbInet_Ntoa = CStr(Asc(IPLong.Byte4)) + "." + CStr(Asc(IPLong.Byte3)) + "." + CStr(Asc(IPLong.Byte2)) + "." + CStr(Asc(IPLong.Byte1))

Exit Function

error:

End Function

Public Property Get LastIP() As String

LastIP = m_lastIP

End Property

Similar Posts