Clasele java.net.*

Si în Java se comunică, nu-i asa?

Pelin Nicoleta-Corina si Pelin Cristian-Florentin

Limbajul Java a revolutionat modul de gândire a paginilor Web. Paginile de Internet devin din ce în ce mai complexe, mai atractive, cu un grad ridicat de interactivitate. Un domeniu incitant pe care acest limbaj îl abordează cu maturitate îl reprezintă comunicatia între calculatoare. Prezentul articol îsi propune să studieze clasele care se ocupă de acest subiect.

Definitii

URL prescurtare pentru Uniform Reference Locator, este o referintă către un obiect pe World Wide Web. Aceasta referintă nu mai poate fi schimbată din momentul în care a fost creată. Functiile care implementează acest concept în Java se găsesc în java.net.URL.

Socketul reprezintă o „mufa“ prin care 2 calculatoare pot schimba date.

Adresa internet sau IP este adresa fiecărui utilizator conectat la Internet. Acest tip de date este implementat în clasa java.net.InetAddress.

Portul reprezintă poarta fizică pe care comunică două calculatoare între care s-a stabilit o legătură. Evident, pentru o comunicatie efectivă, cele două calculatoare trebuie să comunice pe acelasi port. În aplicatia care urmează, portul comun este setat din program (4444), dar poate fi schimbat de către programator.

În continuare vom prezenta câteva subclase din pachetul java.net pentru facilitarea lucrului cu metodele ce implementează conceptele de retea.

Clasa java.net.URLConnection

Această clasă este concepută pentru a reprezenta o conexiune activă spre un obiect definit de URL. Prin facilitătile oferite de această clasă se câstigă un control sporit asupra salvării (download) continuturilor URL. Metodele cele mai utilizate definite în această clasă sunt:

Clasa java.net.ServerSocket

O clasă interesantă prin posibilitătile pe care le oferă programatorilor este clasa java.net.ServerSocket Aceasta clasă implementează operatiile legate de starea de server a socketului. Fără ea nu s-ar putea scrie aplicatii de tip client/server în Java.Constructorii acestei clase sunt:

Dintre metodele acestei clase amintim pe cele mai importante:

Exemplu:

Aplicatia următoare este compusă din 2 programe : un server care asteaptă să fie chemat (ascultă permanent pe un socket) si un client care face o cerere de conectare la socketul la care asteaptă serverul. O aplicatie mai complexă, care permite, de exemplu, conectarea mai multor clienti la un server (obtinând astfel un chat) nu poate ocoli multithreating-ul. Aplicatia prezentată este o aplicatie independentă (nu functionează în interiorul unei pagini Web). Am ales această cale deoarece cele mai multe exemple de programe Java sunt applet-uri, neglijându-se astfel importanta programelor independente. După cunostintele mele în acest domeniu, limbajul Java este la fel de puternic ca si limbajul de inspiratie C++ având în plus avantajele unei standardizări, a independentei de masina pe care rulează (reamintim ca în spatele programelor rulează o masină virtuală Java) si a unei simplificări (nu mai cade în sarcina programatorului gestiunea memoriei si lucrul cu pointeri). Aplicatia poate fi transformată cu usurintă în applet folosindu-se clasa AWT pentru preluarea mesajelor de la tastatura (TextArea) si suprascriind metodele clasei java.applet.Applet

Pentru un real program de comunicatie este necesară existenta unui server care să asculte permanent un socket predefinit si a unui client care să solicite serverului conectarea la socketul respectiv. Se observă că numărul socketului trebuie cunoscut de client . Acesta va fi o variabilă finală (echivalentul unei declaratii constante în alte limbaje de programare) în ambele programe.

Preluarea răspunsului de la tastatură va fi realizată de o clasă getanswer . În această clasă răspunsul va fi memorat în Stringul Sanswer . Tot această clasă va face verificarea dacă în răspunsul primit apare sau nu cuvântul cheie bye care va determina ruperea legăturii însotită de un mesaj de avertizare primit de partener. Această facilitate functionează chiar dacă apar spatii înainte sau după cuvântul cheie bye. Cei doi parteneri de discutii vor comunica pe portul 4444. Acesta poate fi schimbat de programator, cu observatia că trebuie să fie acelasi atât în programul server, cât si în programul client. Serverul va astepta conectarea unui client într-o buclă infinită while(true) . Pentru a evita o nouă buclă de asteptare am folosit facilitatea instructiunii socket=servsosket.accept(); de a bloca sistemul până când aceasta va fi executată. Odată legatura stabilită, serverul va lua cunostintă de identitatea clientului prin aflarea adresei de IP, iar dacă ceva nu-i place la interlocutor poate refuza „convorbirea“. Această întrerupere se va face politicos prin anuntarea clientului ca serverul a rupt legătura. Dacă însă comunicarea este acceptată, serverul trimite un mesaj de confirmare programului client permitând acestuia initierea schimbului de mesaje. Acest schimb de mesaje va fi efectuat până când serverul introduce „bye“ sau până când serverul primeste un „bye“ cazuri în care legătura este întreruptă.

Consideratii finale

Prin clasele java.net.* puse la dispozitie de mediul Java, un programator depaseste cadrul restrâns al propriului computer, începând interactiunea cu exteriorul. Limbajul Java este dedicat Internetului. O aplicatie Java care functionează doar pentru efecte vizuale interesante ce apar pe pagina vreunui navigator, este fără îndoială o aplicatie utilă, dar nu foloseste toată puterea acestui limbaj. Aventura începe acolo unde mai multe computere legate într-o retea (poate fi si un Intranet) încep să colaboreze, să schimbe informatii, să învete unele de la altele. Până acum acest domeniu era dezvoltat prin C, astăzi, prin independenta de platformă, prin usurinta programării, Java preia cu succes toate sarcinile „C“-ului atrăgând un număr din ce în ce mai mare de programatori. Punctul slab al limbajului , viteza redusă de rulare a masinii virtuale Java, este pe cale de a fi înlaturat prin crearea de cipuri speciale Java. Concluzionând putem spune că, desi la noi în tară, din cauza lipsei infrastructurii informatice , limbajul Java pătrunde si se dezvoltă mai greu, programatorii care îndrăgesc acest limbaj au toate motivele să fie optimisti, deoarece marile firme soft (Sun, Microsoft, Oracle, IBM, s.a.) sustin acest limbaj.

Pelin Nicoleta-Corina si Pelin Cristian-Florentin sunt cercetători la Institutul pentru Tehnica de Calcul Bucuresti si pot fi contactati la adresele de e-mail: nicoleta@itcgate.itc.ro si cristi@itcgate.itc.ro

(C) Copyright Computer Press Agora