Documente Academic
Documente Profesional
Documente Cultură
Cuprins
Introducere Socluri Berkley (Berkley Sockets) Socluri Java (Java Sockets) java.net
Java Datagram Socket Buffered Socket Data Stream Socket Secure Sockets
Recapitulare!
Fluxuri Java (Java Streams) java.io Fire de execuie (Java Threads)
Introducere
Pachetul java.net permite dezvoltarea de aplicaii Java n reea furniznd dou servicii de comunicaii:
un set de clase pentru descrcarea i manipularea obiectelor URL o implementare nativ a soclurilor Berkley
Berkley Sockets
Au fost introduse n 1981 n Unix BSD 4.2 ca i o interfa generic pentru comunicarea interprocese (IPC) Unix-to-Unix. Reprezint primul protocol de comunicare peerto-peer peste stiva de protocoale TCP/IP suportat n acest moment de orice sistem de operare:
parte a kernelului n Unix BSD
servicii de sine stttoare servicii IPC n reea
WinSock API n cazul sistemelor Windows biblioteci specializate pentru alte sisteme sisteme de operare
Sockets
Caracteristici ale soclurilor:
reprezint captul unui canal de comunicaie peer-topeer au un nume i o adres de reea din punctul de vedere al programatorului, soclurile ascund detaliile privind reeaua
Tipuri de socluri:
flux (stream) datagram (datagram) neprelucrat (raw)
Stream Sockets
Furnizeaz interfaarea cu protocolul de transport orientat-pe-conexiune: TCP. Garanteaz c pachetele de date sunt transmise fr erori, fr duplicate i sunt recepionate n ordinea n care au fost trimise. Datele sunt considerate a fi sub forma unui flux continuu de octei fr limit n ceea ce privete dimensiunea. Caracteristici TCP (recap.)
gestiunea conexiunii de date controlul fluxului reasamblarea pachetelor detecia erorilor
Datagram Sockets
Furnizeaz interfaarea cu protocolul neorientat pe conexiune: UDP. Toate problemele legate de sigurana transportului revin programatorului. Datele sunt considerate a fi mpachetate n datagrame de dimesniune limitat: max 32 KB. Caracteristici UDP (recap.)
utilizat pentru transmiterea de pachete independente fr a oferi nici o garanie n ceea ce privete
detecia duplicatelor secvenierea mesajelor confirmarea mesajelor
Raw Sockets
Furnizeaz interfaarea cu protocoalele de nivel Internet: IP i ICMP. Nu ofer servicii peer-to-peer tradiionale. Sunt folosite pentru a testa noi protocoale de transport sau pentru a accesa faciliti avansate ale protocoalelor existente.
Identificarea soclurilor
Adresa unui soclu ntr-o reea TCP/IP const din dou pri:
Socket = Net_ID / Host_ID + Port_ID adresa IP: numr pe 32 bii poate fi nlocuit de numele de domeniu al hostului adresa de port: numr pe 16 bii
Adresa IP n Java
Este ncapsulat n clasa java.net.InetAddress Metode
public static InetAddress getByName(String host) throws UnknownHostException public static InetAddress[ ] getAllByName(String host) throws UnknownHostException public static InetAddress getLocalHost( ) throws UnknownHostException public byte[ ] getAddress( ) public String getHostName( )
1.
-
2.
-
3.
-
4.
-
Conectarea la server
clientul iniializeaz o conexiune la portul deschis de server i poate rmne blocat pn primete acceptul
5.
-
Acceptarea conexiunii
serverul accept prima conexiunea din coad (care e la rnd) i pornete un nou fir de execuie pentru a trata cererile acelui client
6.
-
Transferul de date
datele ce trebuie comunicate sunt trimise i recepionate n ambele direcii
7.
-
nchiderea soclurilor
clientul i serverul nchid capetele conexiunii
Atenie! Soclurile reprezint resurse limitate i trebuie gestionate cu grij
Comunicaia ntre socluri - diagrama Procesul client: Procesul server: 1. Socket() 2. bind() 3. listen() ncepe ncepe fir 5. accept() sesiune TCP de execuie accept() (alt client, etc.) 6. read() write() 7. close()
1. Socket() 4. connect()
Java Sockets
Ierarhia de clase din pachetul java.net
java.lang Object java.net
DatagramSocket DatagramPacket ServerSocket Socket SocketImpl (abstract)
DatagramSocket
implementeaz un soclu pentru transmiterea i recepionarea datagramelor
Clasa DatagramPacket
Constructori
public DatagramPacket(byte ibuf[], int ilength) public DatagramPacket(byte ibuf[], int ilength, InetAddress iaddr, int port)
Metode
public InetAddress getAddress() public byte [ ] getDate() public int getLength() public int getPort()
Clasa DatagramSocket
Constructori
public DatagramSocket() throws SocketException public DatagramSocket(int port) throws SocketException
Metode
public void close() public int getLocalPort() public void receive(DatagramPacket p) throws IOException public void send(DatagramPacket p) throws IOException public void finalize()
Comunicarea cu datagrame - diagrama Client Datagram Socket new new send mesaj receive getData In Packet In Packet Server Datagram Socket new new Out Packet Out Packet
ServerSocket
este utilizat de server pentru a asculta cererile de conexiune venite din partea clienilor
SocketImpl
clas abstract care definete metodele JDK pentru lucrul cu socluri ce trebuie implementate indiferent de platform
Buffered-Stream Sockets
Datele ce trebuie transmise i recepionate prin reea se introduc / se extrag din fluxurile de ieire / intrare asociate soclului. Pentru mbuntirea performanelor se recomand utilizarea buffer-elor
numrul de operaii cu fluxurile este redus prin citirea / scrierea blocurilor de octei
Raw Sockets
J2SDK API nu suport acest tip de socluri! Alternative:
Implementarea n alte limbaje de programare (de ex. C/C++) Utilizarea API-ului Jpcap http://jpcap.sourceforge.net/ http://netresearch.ics.uci.edu/kfujii/jpcap/doc/
Socluri securizate
Criptarea datelor vehiculate prin socluri poate asigura:
securizarea comunicrii n reea, confidenialitatea comunicrii autentificarea clienilor i a serverelor, etc.
Pachete JSSE
javax.net.ssl
conine clasele abstracte care definesc API-ul pentru comincarea securizat n reea
javax.net
conine clasele abstracte pentru fabrica de socluri
aceste clase pot fi folosite n locul constructorilor pentru crearea soclurilor securizate
javax.security.cert / java.security.cert
conine un set minimal de clase pentru manipularea certificatelor cu cheie public
com.sun.net.ssl
conine clasele care implementez algoritmii de criptare i protocoalele corespunztoare conform Sun tehnic vorbind, nu face parte din JSSE deci poate fi nlocuit cu orice alt implementare
public abstract ServerSocket createServerSocket(int port) throws IOException public abstract ServerSocket createServerSocket(int port, int queueLength) throws IOException public abstract ServerSocket createServerSocket(int port, int queueLength, InetAddress interface) throws IOException
Bibliografie
Capitolul 10 din R. Orfali, D. Harkey, Client/Server Programming with Java and CORBA, John Wiley & Sons, 1997 E.R. Harold, Java Network Programming, OReilly, 2004