DIR Return Create A Forum - Home
---------------------------------------------------------
Forum Practic
HTML https://practic.createaforum.com
---------------------------------------------------------
*****************************************************
DIR Return to: Informatica
*****************************************************
#Post#: 131--------------------------------------------------
APLICATII DE RETEA - JAVA
DIR By: iulianstoian
Date: January 13, 2015, 7:05 pm
---------------------------------------------------------
Pachetul java.net
Clase y6z18zm
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
Folosirea adreselor IP (Internet Protocol)
Clasa InetAdress
Furnizeaza mecanismul prin intermediul caruia sunt manipulate
adresele IP.
Metode bytest getAddress( )
Returneaza adresa efectiva reprezentata de obiectul respectiv
intr-un vector de 4 octeti.Cel mai semnificativ octet se gaseste
in getAddress()s0t.
Ex: s123, 45, 67, 89t
java.lang.String getHostAddress( )
Returneaza adresa efectiva sub forma unui sir “%d.%d.%d.%d”
Ex: “123.45.67.89” java.lang.String getHostName( )
Returneaza 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.InetAddressst
getAllByName( java.lang.String host ) throws
java.net.UnknownHostException
Determina toate adresele unui claculator. (Daca un calculator
este conectat la mai multe retele el trebuie sa aiba cate o
adresa IP pentru fiecare retea la care este conectat).
Parametrul host poate fi - fie numele masinii ex: java.sun.com
- fie un sir reprezentand adresa IP a masinii static
java.net.InetAddress getByName( java.lang.String host ) throws
java.net.UnknownHostException
Construieste adresa IP a unui calculator. int hashCode( )
java.lang.String toString( )
Intrucat acesata clasa nu are constructor public, pentru a crea
o instanta a unui obiect de tip InetAddress trebuie folosita una
din metodele statice : getLocalHost, getAllByName sau getByName,
care apeleaza la randul lor cnstructorii privati ai clasei.
Comunicarea prin protocoale orientate pe conexiune
Un protocol este o combinatie de reguli de comunicatie si
formate de mesaje care trebuie respectate de calculatoarele
legate in retea pentru a schimba date. Scopul primar al
protocoalelor este de a permite comunicatia intre calculatoare,
indiferent de retea sau de hardware-ul calculatoarelor legate in
retea.
O conexiune reprezinta un canal sigur de comunicatie in retea,
stabilit de catre un protocol pentru transmiterea corecta si in
ordine a mesajelor intre calculatoare. O conexiune este formata
din doua fluxuri de date unidirectionale folosite pentru
comunicatie precum si din doua socluri (socket) care permit
trimiterea, respectiv receptia datelor. Orice conexiune este
unic determinata de cele doua socluri plasate la cele doua
capete ale conexiunii.
Versiunea standard de Java foloseste pentru implementarea
comunicatiei pe baza de conexiuni protocolul TCP (Transmission
Control protocol), unul din protocoalele de baza ale familiei
TCP/IP.
Modul de lucru cu soclurile se incadreaza in modelul
client/server de scriere de aplicatii, model in care aplicatiile
se impart in doua categorii :
• programe client - cele care initiaza conversatia
• programe server - cele care ofera servicii programelor client
In virtutea acestui fapt, orice conexiune intre doua programe
care comunica prin retea este determinata unic de 4 elemente :
1. adresa gazdei pe care ruleaza aplicatia client
2. numarul de port al aplicatiei client
3. adresa gazdei pe care ruleaza aplicatia server
4. numarul de port pe care serverul primeste cererile
Un soclu Java poate lucra in doua moduri :
- direct - implicit (suficient pentru majoritatea aplicatiilor)
- cu facilitati speciale pe soclu, folosit de aplicatiile care
necesita comunicarea peste un zid de protectie (firewall) sau
prin intermediul unui server proxy
Implementarea unui soclu (client sau server) se realizeaza prin
extinderea clasei abstracte SocketImpl.Metodele acestei clase
pun la dipozitie instrumente de comunicatie directa. Pentru a
crea un soclu cu facilitati speciale este necesara redefinirea
metodelelor din aceasta clasa.
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
Accepta realizarea unei conexiuni protected abstract int
available( ) throws java.io.IOException
Returneaza nr de octeti care pot fi cititi fara a bloca
conexiunea protected abstract void bind( java.net.InetAddress
host, int port ) throws java.io.IOException
Leaga 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
) throws java.io.IOException
Realizeaza 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
Stabileste numarul 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 abstractizeaza notiunea de soclu client (numit in
general soclu) si este responsabila de majoritatea operatiilor
necesare comunicatiei in retea. Prin instantierea unui obiect de
tip Socket, programul client poate sa initieze o conexiune (prin
constructor) si sa implementeze comunicatia prin retea.
Structura unei aplicatii client bazate pe conexiuni
1. Initializari
2. Are facilitati speciale de soclu Da - Schimbare comportament
prin SocketImpl
3. Creare soclu de comunicare si stabilire conexiune
4. Obtinere fluxuri de comunicare cu partenerul
5. Prelucrari specifice aplicatiei client
6. Este ultimul utilizator al soclului Da - Inchidere soclu
7. Faza finala a executiei
Clasa Socket
Constructori protected Socket( )
Creeaza o conexiune fara 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 )
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 iesire 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 asculta cererile venite de la
clienti si le ofera serviciul pentru care a fost creat.
Identificarea serverelor se face prin intermediul portului pe
care serverul asteapta cererile de conexiune venite din partea
clientilor. Majoritatea serviciilor foarte des folosite in
Internet au asociate porturi standardizate, pentru a permite
clientilor sa opereze cu diferite servere in vederea obtinerii
unui serviciu.
Exemple de numere de porturi standardizate :
Serviciu Port asociat
Posta electronica 25
Transfer de fisiere 21
Telnet 23
Finger 79
WWW 80
Ecou 7
Executie la distanta (rexec) 512
POP3 (Post Office Protocol) 110
Primul lucru pe care trebui sa-l faca un program server este sa
se asocieze portuluistabilit la momentul proiectarii aplicatiei
si sa initieze ascultarea cererilor de servicii venite de la
clienti. Aceste lucruri se realizeaza prin constructorul clasei
ServerSocket, clasa care implementeaza soclul programului
server.
Un lucru esential in proiectarea unei aplicatii server este
faptul ca aceasta trebuie construita in asa fel incat sa poata
prelucra in paralel cererile clientilor. Acest lucru se
realizeaza prin folosirea mai multor fire de executie, fiecare
fir de executie ocupandu-se cu un singur client. De asemenea
este prevazut un mecanism pentru a limita numarul de cereri care
pot fi prelucrate in paralel si deci si numarul firelor de
executie care ruleaza la un moment dat. Implicit acest numar
este 50, dar poate fi specificat ca argument al constructorului.
Orice cerere noua va fi respinsa daca numarul de cereri
prelucrate are valoarea maxima specificata.
Structura unei aplicatii server bazate pe conexiuni
1. Initializari
2. Are facilitati speciale de soclu Da - Schimbare comportament
prin SocketImpl
3. Creare soclu server pentru ascultare cereri
4. Ascultarea continua Nu - Inchidere soclu
Faza finala
5. Ascultare cereri conexiuni
6. Acceptare cerere si obtinere soclu pentru comunicare
7. Creare fir de executie pentru tratarea conexiunii
7.1. Initializare fir tratare conexiune
7.2. Prelucrare conforma cu protocolul textului
7.3. Inchidere soclu comunicare
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 reprezinta o cantitate de informatii trimisa prin
intermediul unui pachet independent fata de alte informatii.
Fiecare pachet este transmis de la o masina la alta doar pe baza
informatiilor continute de el insusi. Pachete trimise de la o
destinatie catre aceeasi sursa pot ajunge pe rute diferite si in
orice ordine.
In cadrul implementarii standard Java, datagramele sunt
transportate prin retea folosind prototcolul UDP (User Datagram
Protocol), unul din protocoalele de baza ale familiei TCP/IP.
Avantaje:
• viteza de transfer mai mare
• adaptarea la conditiile de moment ale retelei (congestii,
legaturi temporar indisponibile, etc)
Dezavantaje : lucru mai dificil
Diferenta fata de comunicarea printr-un canal sigur oferita de
metoda comunicatiei prin conexiuni este ca, folosind datagrame,
nu se stabileste o legatura permanenta intre client si server.
De fapt, chiar notiunile de client si server isi pierd
semnificatiile, intrucat ambele folosesc pentru comunicare
acelasi tip de soclu, implementat de clasa DatagramSocket.
Clientul va fi aplicatia care incapsuleaza o cantitate de date
(cerere) intr-un pachet si o transmite unui partener, iar server
va fi aplicatia care primeste pachete de tip cerere si retrimite
pachete cu raspunsuri la cererile primite. In cazul in care un
pachet se pierde, clientul va retransmite cererea dupa un anumit
interval de timp.
Pentru datagrame nu exista destinatii implicite, asadar in
fiecare datagrama trebuie specificate:
• adresa destinatie
• numarul portului la care se trimite datagrama
• continutul datagramei
In Java, acese informatii sunt concentrate in obiecte de tip
DatagramPacket.
Structura unei aplicatii bazate pe datagrame
1. Initializari
2. Are facilitati speciale de soclu Da - Schimbare comportament
prin DatagramSocketImpl
3. Creare soclu datagrame
4. Care este actiunea urmatoare Transmisie
Producere date
Incapsulare date in pachet
Trimitere date
Receptie
Creare pachet receptie date
Receptie date
Prelucrare date
5. Este ultimul utilizator al soclului Nu - GOTO 4
Da -
Inchidere soclu
Faza finala
Clasa DatagramPacket
Constructori public DatagramPacket( bytest ibuf, int ilength )
Construieste un obiect pentru receptionarea pachetelor de
lungime ilength. Obs: ilength <a ibuf.length
public DatagramPacket( bytest ibuf, int ilength,
java.net.InetAddress iaddr, int iport )
Construieste un obiect pentru trimiterea de pachete de lungime
ilength spre gazda si portul specificate.
Metode
synchronized java.net.InetAddress getAddress( )
Returneaza adresa IP la care datagrama este trimisa sau de la
care a fost receptionata synchronized void setAddress(
java.net.InetAddress iaddr ) synchronized bytest getData( )
Returneaza datele care sunt trimise sau care au fost
receptionate synchronized void setData( bytest ibuf )
synchronized int getLength( )
Returneaza lungimea pachetului care va fi trimis sau care a fost
receptionat synchronized void setLength( int ilength )
synchronized int getPort( )
Returneaza numarul portului la care datagrama este trimisa sau
de la care a fost receptionata 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
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
Transferul de documente din WWW
Adresele prin care sunt localizate documentele se numesc URL-uri
(Uniform Resource Locator). Ele permit identificarea unica a
unui document pe baza urmatorilor parametri :
• protocolul prin care se transfera documentul
• serverul care gazduieste documentul
• numarul de port, daca este diferit fata de cel implicit
folosit de protocol
• directorul in care se afla documentul
. numele fisierului in care este plasat documentul
Mai mult, este posibila identificarea chiar a unor sectiuni din
documentul respectiv.
Folosirea adreselor URL se realizeaza 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(
)
*****************************************************
Page 1 of 1