Sunteți pe pagina 1din 12

Aplicatii de retea

APLICAII DE RETEA
Pachetul java.net
Clase
ContentHandler
DatagramPacket
DatagramSocket
DatagramSocketImpl
HttpURLConnection
InetAddress
MulticastSocket
ServerSocket
Socket
SocketImpl
URL
URLConnection
URLEncoder
URLStreamHandler

Exceptii
BindException
ConnectException
MalformedURLException
NoRouteToHostException
ProtocolException
SocketException
UnknownHostException
UnknownServiceException

Interfete
ContentHandlerFactory
FileNameMap
SocketImplFactory
URLStreamHandlerFactory

Aplicatii de retea

Folosirea adreselor IP (Internet Protocol)


Clasa InetAdress
Furnizeaz\ mecanismul prin intermediul c\ruia sunt
manipulate adresele IP.
Metode
byte[t getAddress( )
Returneaza adresa efectiva reprezentat\ de obiectul respectiv ntr-un vector
de 4 octeti.Cel mai semnificativ octet se g\se[te n getAddress()[0t.
Ex: [123, 45, 67, 89t
java.lang.String getHostAddress( )
Returneaz\ adresa efectiv\ sub forma unui [ir %d.%d.%d.%d
Ex: 123.45.67.89
java.lang.String getHostName( )
Returneaz\ numele simbolic al adresei respective
static java.net.InetAddress getLocalHost( ) throws
java.net.UnknownHostException
Ex: xyz@thor.infoiasi.ro
boolean isMulticastAddress( )
boolean equals( java.lang.Object obj )
static java.net.InetAddress[t getAllByName( java.lang.String host )
throws java.net.UnknownHostException
Determin\ toate adresele unui claculator. (Dac\ un calculator este conectat la
mai multe retele el trebuie s\ aib\ cte o adres\ IP pentru fiecare retea la care
este conectat). Parametrul host poate fi
- fie numele ma[inii ex:
java.sun.com
- fie un [ir reprezentnd adresa IP a ma[inii
static java.net.InetAddress getByName( java.lang.String host ) throws
java.net.UnknownHostException
Construie[te adresa IP a unui calculator.
int hashCode( )
java.lang.String toString( )

Intruct acesat\ clas\ nu are constructor public, pentru a


crea o instant\ a unui obiect de tip InetAddress trebuie folosit\
una din metodele statice : getLocalHost, getAllByName sau
getByName, care apeleaz\ la rndul lor cnstructorii privati ai
clasei.
Comunicarea prin protocoale orientate pe conexiune
Un protocol este o combinatie de reguli de comunicatie
[i formate de mesaje care trebuie respectate de
calculatoarele legate n retea pentru a schimba date. Scopul
2

Aplicatii de retea

primar al protocoalelor este de a permite comunicatia ntre


calculatoare, indiferent de retea sau de hardware-ul
calculatoarelor legate n retea.
O conexiune reprezint\ un canal sigur de comunicatie n
retea, stabilit de c\tre un protocol pentru transmiterea corect\
[i n ordine a mesajelor ntre calculatoare. O conexiune este
format\ din dou\ fluxuri de date unidirectionale folosite
pentru comunicatie precum [i din dou\ socluri (socket) care
permit trimiterea, respectiv receptia datelor. Orice conexiune
este unic determinat\ de cele dou\ socluri plasate la cele dou\
capete ale conexiunii.
CONEXIUNE

Calculator

soclu

soclu

Calculator

canale de
comunicatie

Versiunea standard de Java folose[te pentru


implementarea comunicatiei pe baz\ de conexiuni protocolul
TCP (Transmission Control protocol), unul din protocoalele de
baz\ ale familiei TCP/IP.
Modul de lucru cu soclurile se ncadreaz\ n modelul
client/server de scriere de aplicatii, model n care aplicatiile
se mpart n dou\ categorii :
programe client - cele care initiaz\ conversatia
programe server - cele care ofer\ servicii
programelor client
In virtutea acestui fapt, orice conexiune ntre dou\ programe
care comunic\ prin retea este determinat\ unic de 4 elemente
:
1. adresa gazdei pe care ruleaz\ aplicatia client
2. num\rul de port al aplicatiei client
3. adresa gazdei pe care ruleaz\ aplicatia server
4. num\rul de port pe care serverul prime[te cererile
Un soclu Java poate lucra n dou\ moduri :
direct - implicit (suficient pentru majoritatea
aplicatiilor)
3

Aplicatii de retea

cu facilit\ti speciale pe soclu, folosit de aplicatiile care


necesit\ comunicarea peste un zid de protectie
(firewall) sau prin intermediul unui server proxy
Implementarea unui soclu (client sau server) se realizeaz\
prin extinderea clasei abstracte SocketImpl.Metodele acestei
clase pun la dipozitie instrumente de comunicatie direct\.
Pentru a crea un soclu cu facilit\ti speciale este necesar\
redefinirea metodelelor din aceast\ clas\.

Clasa SocketImpl
Variabile
protected java.io.FileDescriptor fd
The file descriptor object for this socket.
protected java.net.InetAddress address
The IP address of the remote end of this socket.
protected int port
The port number on the remote host to which this socket is
connected.
protected int localport
The local port number to which this socket is connected.

Metode
protected java.io.FileDescriptor getFileDescriptor( )
protected java.net.InetAddress getInetAddress( )
protected abstract java.io.InputStream getInputStream( ) throws
java.io.IOException
protected int getLocalPort( )
protected abstract java.io.OutputStream getOutputStream( ) throws
java.io.IOException
protected int getPort( )
java.lang.String toString( )
protected abstract void accept( java.net.SocketImpl s )
throws java.io.IOException
Accept\ realizarea unei conexiuni
protected abstract int available( ) throws java.io.IOException
Returneaz\ nr de octeti care pot fi cititi f\r\ a bloca conexiunea
protected abstract void bind( java.net.InetAddress host, int port )
throws java.io.IOException
Leag\ conexiunea de un anumit partener specificat prin adresa IP si port
protected abstract void close( ) throws java.io.IOException
Inchide o conexiune
protected abstract void connect( java.net.InetAddress address, int port

Aplicatii de retea
) throws java.io.IOException
Realizeaz\ o conexiune cu un anumit partener
protected abstract void connect( java.lang.String host, int port )
throws java.io.IOException
protected abstract void create( boolean stream ) throws
java.io.IOException
protected abstract void listen( int backlog ) throws java.io.IOException
Stabile[te num\rul maxim de conexiuni admise
protected native java.lang.Object clone( ) throws
java.lang.CloneNotSupportedException
protected void finalize( ) throws java.lang.Throwable

Programe de tip client


Clasa Socket abstractizeaz\ notiunea de soclu client
(numit n general soclu) [i este responsabil\ de majoritatea
operatiilor necesare comunicatiei n retea. Prin instantierea
unui obiect de tip Socket, programul client poate s\ initieze o
conexiune (prin constructor) [i s\ implementeze comunicatia
prin retea.
Structura unei aplicatii client bazate pe conexiuni
1. Initializ\ri

2.

Are facilit\ti speciale de soclu ?


Da Schimbare comportament prin SocketImpl
3. Creare soclu de comunicare [i stabilire conexiune

1.
2.
3.

Obtinere fluxuri de comunicare cu partenerul


Prelucr\ri specifice aplicatiei client

Este ultimul utilizator al soclului ?


Da Inchidere soclu
7. Faza final\ a executiei

Clasa Socket
Constructori
protected Socket( )
Creeaz\ o conexiune f\r\ nici un partener specificat
protected Socket( java.net.SocketImpl impl )
throws java.net.SocketException
public Socket( java.net.InetAddress address, int port )
throws java.io.IOException
Creates a socket and connects it to the specified port number at
the specified IP address.
public Socket( java.lang.String host, int port )
throws java.net.UnknownHostException, java.io.IOException
public Socket( java.net.InetAddress host, int port, boolean stream )
throws java.io.IOException
If the stream argument is true, this creates a stream socket. If
the stream argument is false, it creates a datagram socket.
public Socket( java.lang.String host, int port, boolean stream )

Aplicatii de retea
throws java.io.IOException
public Socket( java.lang.String host, int port,
java.net.InetAddress localAddr, int localPort )
throws java.io.IOException
The Socket will bind() to the local address and port supplied.
public Socket( java.net.InetAddress address, int port,
java.net.InetAddress localAddr, int localPort )
throws java.io.IOException

Metode
java.net.InetAddress getInetAddress( )
java.io.InputStream getInputStream( ) throws java.io.IOException
Obtine fluxul de intrare de la care pot fi citite datele din acest soclu.
java.net.InetAddress getLocalAddress( )
int getLocalPort( )
java.io.OutputStream getOutputStream( ) throws java.io.IOException
Obtine fluxul de ie[ire prin care pot fi scrise datele
int getPort( )
static synchronized void setSocketImplFactory(
java.net.SocketImplFactory fac ) throws java.io.IOException
int getSoLinger( ) throws java.net.SocketException
synchronized int getSoTimeout( ) throws java.net.SocketException
synchronized void setSoTimeout( int timeout )
throws java.net.SocketException
boolean getTcpNoDelay( ) throws java.net.SocketException
void setTcpNoDelay( boolean on ) throws java.net.SocketException
synchronized void close( ) throws java.io.IOException
void setSoLinger( boolean on, int val ) throws java.net.SocketException
java.lang.String toString( )

Programul tip server


Serverul este programul care ascult\ cererile venite de la
clienti [i le ofer\ serviciul pentru care a fost creat.
Identificarea serverelor se face prin intermediul portului pe
care serverul a[teapt\ cererile de conexiune venite din partea
clientilor. Majoritatea serviciilor foarte des folosite n Internet
au asociate porturi standardizate, pentru a permite clientilor
s\ opereze cu diferite servere n vederea obtinerii unui
serviciu.
Exemple de numere de porturi standardizate :
Serviciu
Po[ta electronic\
Transfer de fi[iere
Telnet

Port asociat
25
21
23
6

Aplicatii de retea

Finger
WWW
Ecou
Executie la distant\
(rexec)
POP3 (Post Office
Protocol)

79
80
7
512
110

Primul lucru pe care trebui s\-l fac\ un program server


este s\ se asocieze portuluistabilit la momentul proiect\rii
aplicatiei [i s\ initieze ascultarea cererilor de servicii venite
de la clienti. Aceste lucruri se realizeaz\ prin constructorul
clasei ServerSocket, clasa care implementeaz\ soclul
programului server.
Un lucru esential n proiectarea unei aplicatii server este
faptul c\ aceasta trebuie construit\ n a[a fel nct s\ poat\
prelucra n paralel cererile clientilor. Acest lucru se realizeaz\
prin folosirea mai multor fire de executie, fiecare fir de
executie ocupndu-se cu un singur client. De asemenea este
prev\zut un mecanism pentru a limita num\rul de cereri care
pot fi prelucrate n paralel [i deci [i num\rul firelor de executie
care ruleaz\ la un moment dat. Implicit acest num\r este 50,
dar poate fi specificat ca argument al constructorului. Orice
cerere nou\ va fi respins\ dac\ num\rul de cereri prelucrate
are valoarea maxim\ specificat\.
Structura unei aplicatii server bazate pe conexiuni
1. Initializ\ri

2.

Are facilit\ti speciale de soclu ?


Da Schimbare comportament prin SocketImpl
3. Creare soclu server pentru ascultare cereri

1.

Ascultarea continu\ ?
Nu Inchidere soclu
Faza final\

2.
3.
4.

Ascultare cereri conexiuni


Acceptare cerere [i obtinere soclu pentru comunicare
Creare fir de executie pentru tratarea conexiunii

7.1.
7.2.
7.3.

Initializare fir tratare conexiune


Prelucrare conform\ cu protocolul textului
Inchidere soclu comunicare

Aplicatii de retea

7.4.

Terminare fir tratare conexiune

8. GOTO 4

Clasa ServerSocket
Constructori
public ServerSocket( int port ) throws java.io.IOException
Creates a server socket on a specified port. A port of 0 creates a
socket on any free port.
The maximum queue length for incoming connection indications (a request
to connect) is set to 50.
public ServerSocket( int port, int backlog ) throws java.io.IOException
public ServerSocket( int port, int backlog,
java.net.InetAddress bindAddr )
throws java.io.IOException
Create a server with the specified port, listen backlog, and local IP
address to bind to. The bindAddr argument can be used on a multi-homed
host for a ServerSocket that will only accept connect requests to one of
its addresses. If bindAddr is null, it will default accepting
connections on any/all local addresses. The port must be between 0 and
65535, inclusive.

Metode
java.net.InetAddress getInetAddress( )
int getLocalPort( )
static synchronized void setSocketFactory(
java.net.SocketImplFactory fac )
throws java.io.IOException
synchronized int getSoTimeout( ) throws java.io.IOException
synchronized void setSoTimeout( int timeout )
throws java.net.SocketException
java.net.Socket accept( ) throws java.io.IOException
void close( ) throws java.io.IOException
java.lang.String toString( )

Comunicatia folosind datagrame


Datagramele reprezint\ o cantitate de informatii trimis\ prin
intermediul unui pachet independent fat\ de alte informatii.
Fiecare pachet este transmis de la o ma[in\ la alta doar pe
baza informatiilor continute de el nsu[i. Pachete trimise de la
o destinatie c\tre aceea[i surs\ pot ajunge pe rute diferite [i n
orice ordine.

Aplicatii de retea

In cadrul implement\rii standard Java, datagramele sunt


transportate prin retea folosind prototcolul UDP (User
Datagram Protocol), unul din protocoalele de baz\ ale familiei
TCP/IP.
Avantaje:
viteza de transfer mai mare
adaptarea la conditiile de moment ale retelei
(congestii, leg\turi temporar indisponibile, etc)
Dezavantaje : lucru mai dificil
Diferenta fat\ de comunicarea printr-un canal sigur
oferit\ de metoda comunicatiei prin conexiuni este c\,
folosind datagrame, nu se stabile[te o leg\tur\ permanent\
ntre client [i server. De fapt, chiar notiunile de client [i server
[i pierd semnificatiile, ntruct ambele folosesc pentru
comunicare acela[i tip de soclu, implementat de clasa
DatagramSocket. Clientul va fi aplicatia care ncapsuleaz\ o
cantitate de date (cerere) ntr-un pachet [i o transmite unui
partener, iar server va fi aplicatia care prime[te pachete de
tip cerere [i retrimite pachete cu r\spunsuri la cererile
primite. In cazul n care un pachet se pierde, clientul va
retransmite cererea dup\ un anumit interval de timp.
Pentru datagrame nu exist\ destinatii implicite, a[adar n
fiecare datagram\ trebuie specificate:
adresa destinatie
num\rul portului la care se trimite datagrama
continutul datagramei
In Java, acese informatii sunt concentrate n obiecte de tip
DatagramPacket.

Structura unei aplicatii bazate pe datagrame


1. Initializ\ri

2.

Are facilit\ti speciale de soclu ?


Da Schimbare comportament prin DatagramSocketImpl
3. Creare soclu datagrame
4. Care este actiunea urm\toare ?
Transmisie
Producere date
Incapsulare date in pachet
Trimitere date
Receptie
Creare pachet receptie date

Aplicatii de retea
Receptie date
Prelucrare date
5. Este ultimul utilizator al soclului ?
Nu GOTO 4
Da
Inchidere soclu
Faza final\

Clasa DatagramPacket
Constructori
public DatagramPacket( byte [t ibuf, int ilength )
Construie[te un obiect pentru receptionarea pachetelor de lungime ilength. Obs:
ilength <= ibuf.length
public DatagramPacket( byte [t ibuf, int ilength, java.net.InetAddress iaddr, int iport )
Construie[te un obiect pentru trimiterea de pachete de lungime ilength spre gazda [i
portul specificate.

Metode
synchronized java.net.InetAddress getAddress( )
Returneaz\ adresa IP la care datagrama este trimis\ sau de la care a fost
receptionat\
synchronized void setAddress( java.net.InetAddress iaddr )
synchronized byte[t getData( )
Returneaz\ datele care sunt trimise sau care au fost receptionate
synchronized void setData( byte[t ibuf )
synchronized int getLength( )
Returneaz\ lungimea pachetului care va fi trimis sau care a fost receptionat
synchronized void setLength( int ilength )
synchronized int getPort( )
Returneaz\ num\rul portului la care datagrama este trimis\ sau de la care a
fost receptionat\
synchronized void setPort( int iport )

Clasa DatagramSocket
Constructori
public DatagramSocket( ) throws java.net.SocketException
Constructs a datagram socket and binds it to any available port on the
local host machine.
public DatagramSocket( int port ) throws java.net.SocketException
Constructs a datagram socket and binds it to the specified port on the
local host machine.
public DatagramSocket( int port, java.net.InetAddress laddr )
throws java.net.SocketException
Creates a datagram socket, bound to the specified local address. The
local port must be between 0 and 65535 inclusive.

Metode

10

Aplicatii de retea
java.net.InetAddress getLocalAddress( )
int getLocalPort( )
synchronized int getSoTimeout( ) throws java.net.SocketException
synchronized void setSoTimeout( int timeout )
throws java.net.SocketException
void close( )
synchronized void receive( java.net.DatagramPacket p )
throws java.io.IOException
void send( java.net.DatagramPacket p ) throws java.io.IOException

11

Aplicatii de retea

Transferul de documente din WWW


Adresele prin care sunt localizate documentele se numesc
URL-uri (Uniform Resource Locator). Ele permit identificarea
unic\ a unui document pe baza urm\torilor parametri :
protocolul prin care se transfer\ documentul
serverul
care g\zduie[te documentul
num\rul de port, dac\ este diferit fat\ de cel implicit
folosit de protocol
directorul n care se afl\ documentul
. numele fi[ierului n care este plasat documentul
Mai mult, este posibil\ identificarea chiar a unor sectiuni din
documentul respectiv.
Folosirea adreselor URL se realizeaz\ prin intermediul
clasei URL.
Clasa URL
Constructori
public URL( java.lang.String spec )
throws java.net.MalformedURLException
public URL( java.lang.String protocol, java.lang.String host, int port,
java.lang.String file )
throws java.net.MalformedURLException
...

Metode
final java.lang.Object getContent( ) throws java.io.IOException
java.lang.String getFile( )
java.lang.String getHost( )
int getPort( )
java.lang.String getProtocol( )
java.lang.String getRef( )
static synchronized void setURLStreamHandlerFactory(
java.net.URLStreamHandlerFactory fac )
java.net.URLConnection openConnection( ) throws java.io.IOException
final java.io.InputStream openStream( ) throws java.io.IOException
boolean sameFile( java.net.URL other )
java.lang.String toExternalForm( )
java.lang.String toString( )

12