Software Distribuït - T4 - Client/Servidor

Documentos relacionados
Software Distribuït - T4 - Client/Servidor

Arquitecturas cliente/servidor

Desarrollo de Aplicaciones Distribuidas. Sockets. Daniel Avellaneda

Arquitecturas cliente/servidor

PROGRAMACION DISTRIBUIDA

Universidad de Cantabria

Pràctica 6: Programació de clients amb TCP i UDP.

Sockets UDP. Arquitecturas Cliente/Servidor, Sem M.I.Yasmine Macedo Reza

Aplicaciones Cliente-Servidor Con Datagramas

Tema II. Sockets. Desarrollo de Aplicaciones para Internet Curso Miguel Reboiro Jato

Red LSUB. 4 de marzo de 2015 GSYC

Capítulo 5. Programación de aplicaciones de red

PROJECTE FI DE CARRERA

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet.

INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES (MÓDULO 2)

Unidad 4. Introducción a los sistemas distribuidos

Sistemes operatius. Què és un sistema operatiu?

Com participar en un fòrum

Tema 1. Comunicación entre Procesos, Sockets

Tema 4 Nivell de Xarxa Adreçament IP

Comunicación entre procesos: sockets udp. Jorge Iván Meza Martínez

Gestores de seguridad en Java

Practica 1.Documentació adicional

Ús de la plataforma de formació online Manual Alumne

Se desea diseñar el software para controlar de forma remota, desde un ordenador, un pequeño robot dotado de:

Servei de Gestió de Serveis Informàtics Secció de Sistemes en Explotació Webmailaj Correu Municipal Configuració nou compte de correu

Canigó - Streaming de fitxers en clients REST.docx

MANUAL D INSTRUCCIONS DE L APLICACIÓ DE SUPORT INFORMÀTIC

Contractacions al GECO v2.0

1.- FUNDAMENTOS FUNCIONAMIENTO GENÉRICO JAVA SOCKETS Creación de Streams de Entrada...7

TFC JEE SUPORT I SEGUIMENT TFC ANNAPURNA

Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar

Servei de manteniment de la llicència d ús del software OR2. Exp

UNIVERSIDAD DISTRITAL FRANCISCO JOSE DE CALDAS FACULTAD DE INGENIERIA INGENIERIA DE SISTEMAS PROGRAMACION AVANZADA. Comunicación en Red

Projecte d enginyeria informàtica (JULIOL 2011) Realitzat per Joan Ayllón Dirigit per Xavier Roca

Tema 3: COMUNICACIÓN ENTRE PROCESOS

Java: comunicación en Internet. Modem. Satelite UMTS W-LAN. Láser. Fibra óptica. Conceptos básicos

Servicios de Internet

Espais de comunicació

Polinomis i fraccions algèbriques

Què és peer-to-peer (P2P)? (I)

DOSSIER PER DONAR D ALTA CITA PRÈVIA A TRAVÉS D EVIA

GUAC. Manual d ús del centres docents públics d altres titularitats. actualització octubre 2014

Justamente, una de las formas de crear un objeto de la clase URL permite especificar también el puerto:

- Vectors y Matrius: Tots els elements són del mateix tipus i estan consecutius a memòria. Accés a l element de la 5ª fila i 6ª columna.

Pas de Missatges. El servidor (àrbitre) crea un thread per a cada client, amb la següent lògica.

La creació de qualsevol llista es fa amb l operador list. En el cas de crear una llista buida la sintaxi és

Configuració de Canigó LOPD. Aquest how-to va dirigit a tots aquells usuaris que vulguin utilitzar la última versió de canigo.support.lopd.

Tema 1. Comunicación entre. Procesos, Sockets

Xarxes informàtiques. Informàtica. 2nESO

Preguntes més freqüents

El correu brossa és l enviament massiu i intencionat de correus electrònics a persones que no volen rebre aquests missatges.

Manual d instal lació i ús Congelador virtual (VFreezer) PFC-Programació d aplicacions per a mòbils usant HTML5

Capa Aplicación: Programación de sockets

Sotware Distribuït - T2 - La xarxa

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

PROJECTE: FRAMEWORK DE PERSISTÈNCIA J2EE

Juan Pavón Mestras Dep. Sistemas Informáticos y Programación Universidad Complutense de Madrid.

XARXES 2. Seguretat de Xarxa. Módul 2: Carles Mateu Departament d'informàtica i Enginyeria Industrial Universitat de Lleida

Capa Aplicación: Programación de sockets

Problema Master mind. Extracte de solució

MANUAL: OBRIR PORTS I DMZ

Pràctica 7: Programació d un servidor TCP.

Manual d accés a les aplicacions

ISE - Procediment de petició i selecció d informació per a l embargament de sous, salaris i pensions

1 SOCKETS EN JAVA. Sistemas Distribuidos::Sockets en Java EUI-SG/INFOR.UVA.ES 1

CONDICIONS PARTICULARS Tipus de servei: SOM Telefonia Mòbil EXTRACTE DEL/S SERVEI/S CONTRACTAT/S PERFILS MOBILAND Hi ha cinc perfils de Mobiland

Federico Peinado

MODIFICACIÓ DELS REQUISITS PER L APLICACIÓ DE REGLES D INVERSIÓ DEL SUBJECTE PASSIU

Introducción a las Redes de Computadoras

Introducción a las Redes de Computadoras. Capa de aplicación. Programación con Sockets. Capitulo 2 Capa de Aplicación

Recepció de documents electrònics Juliol 2012

GUIA RÀPIDA WEB (ROL ADMINISTRADOR)

Canigó HOW-TO s. Eines d intercepció de peticions http

Treball final de grau

INTEGRACIÓ EN UNA XARXA D ÀREA LOCAL, D UN SISTEMA D AUTENTIFICACIÓ SENSE FILS AMB UN SERVIDOR RADIUS.

Recursivitat. Tecnologia de la Programació. Sebastià Vila-Marta. Enginyeria de Sistemes TIC Universitat Politècnica de Catalunya

Llei 9/2014 de la seguretat industrial dels establiments, les instal lacions i els productes Nou Procediment de tramitació

Qüestionari (Adreçament IP)

Comprovació i Instal lació de la màquina virtual de Java per a el correcte funcionament de l applet de signatura

enotum 3.0 Guia per integradors Processament en lots

UNITAT LES REFERÈNCIES EN L ÚS DELS CÀLCULS

Manual per a consultar la nova aplicació del rendiment acadèmic dels Graus a l ETSAV

Tema 7. Programacion en red.

Manual d usuari. Integració de Canal Pacient a La Meva Salut

Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto

Desenvolupament web en l entorn client

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

GUAC. Manual d ús del centres docents privats. Versió octubre 2014

Guía de l Ús del Portal de Proveïdors. Requisits tècnics del proveïdor

Introducció La Xarxa XML Mota de Captació Mota Base Servidor d objectes Plana Web Futur. Índex

Guia per enviar i gestionar fitxers des de Línia Oberta

Disseny de la persistència Serialització

Manual de lliurament de la T- CAT P

Pràctica 3. Implementació de Protocols de Transport. Fragmentació de Segments. Laboratori d Aplicacions i Serveis Telemàtics

Ús del vnc per als equips multimèdia

INSTRUCCIONS D ÚS DEL SERVIDOR D APLICACIONS

UF3-Proxy. Andreu Serracanta Espinalt. viernes 17 de febrero de 12

Transcripción:

Software Distribuït - T4 - Client/Servidor Eloi Puertas i Prats Universitat de Barcelona Grau en Enginyeria Informàtica 14 de març de 2018 1 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Paradigmes Aplicacions Distribuïdes level of abstraction high object space network services, object request broker, mobile agent remote procedure call, remote method invocation client-server message passing low 2 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Pas de Missatges Paradigmes Aplicacions Distribuïdes El pas de missatges és el paradigma més bàsic per a les aplicacions distribuïdes: 1 Un procés envia un missatge que representa una petició. 2 El missatge es lliura a un receptor, que processa la sol.licitud, i envia un missatge en resposta. 3 Al seu torn, la resposta pot desencadenar una nova sol.licitud, la qual condueix a una resposta posterior, i així successivament. Process A Process B a message Message passing 3 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Client Servidor Paradigmes Aplicacions Distribuïdes El model client-servidor assigna rols asimètrics a dos processos que col.laboren Un procés, el servidor, fa el paper d un proveïdor de serveis que espera passivament a l arribada de les sol.licituds. L altre procés, el client, fa sol.licituds específiques al servidor i espera la resposta. Server host service request a client process a server process a service Client host... The Client-Server Paradigm, conceptual 4 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Client Servidor Paradigmes Aplicacions Distribuïdes Simple en el concepte, el model client-servidor proporciona una abstracció eficient per a la prestació de serveis de xarxa. Mitjançant l assignació de rols asimètrics als dos costats, la sincronització d esdeveniments s ha simplificat: el procés del servidor espera peticions el client al seu torn, espera les respostes. Entre les operacions que són requerides es troben: per part del servidor escoltar i acceptar les sol.licituds, per part d un procés client, emetre peticions i rebre respostes. Molts dels serveis d Internet són aplicacions client-servidor. Aquests serveis es coneixen sovint pel protocol que l aplicació implementa. Ben coneguts són els serveis d Internet HTTP, FTP, DNS, Finger, Gopher, etc... 5 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Operacions bàsiques Les operacions bàsiques que es requereixen per donar suport tant a pas de missatge com client-servidor són enviar i rebre. Per comunicacions orientades a la connexió, les operacions de connexió i desconnexió també es requereixen. Amb l abstracció proporcionada per aquest model, els processos interconnectats realitzen operacions d entrada/sortida d una manera similar a E/S amb fitxers. Les operacions d E/S encapsulen el detall de la comunicació de xarxa a nivell de sistema operatiu. L API de sockets es basa en aquest paradigma: API 6 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Paradigmes Aplicacions Distribuïdes L API de sockets ofereix al programador un mecanisme de comunicació entre dos processos que poden residir en diferents màquines. Un socket és punt final d un enllaç de comunicació entre dos processos. L API està dissenyada per: Acomodar múltiples protocols de comunicació (TCP / IP, UNIX, APPLETALK) Implementar codi servidor que queda a l espera de connexions i codi client que inicia aquestes connexions Ser coherent amb l ús de fitxers en Unix. 7 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Model conceptual de l API de sockets Process A Process B a socket 8 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Tipus de sockets Paradigmes Aplicacions Distribuïdes Usualment els S.O. suporten tres tipus de sockets: Datagram -datagrama- (SOCK DATAGRAM): Permeten als processos comunicar-se utilitzant UDP. Un socket Datagram proveeix un flux de missatges bidireccional no es garanteix duplicació o seqüencialitat. Es pot usar tant en comunicacions unicast com multicast Stream -de flux- (SOCK STREAM): Permeten als processos comunicar-se utilitzant TCP. Proveeixen un flux de dades bidireccional, fiable, seqüencial, sense duplicació d informació. Raw -cru- (SOCK RAW). Permeten als processos comunicar-se utilitzant ICMP. Normalment són orientats a datagrama. Només el root pot usar-los i serveixen per desenvolupar protocols 9 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Stream-mode a stream-mode data socket P1 process write operation read operation P2...... a data stream 10 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

API de sockets Stream-mode En Java, l API de sockets stream-mode proveix dues classes: ServerSocket: per acceptar connexions; un objecte d aquesta classe n hi direm socket de connexió. Socket: per intercanviar dades; un objecte d aquesta classe n hi direm un socket de dades. 11 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Diagrama d una connexió entre processos amb sockets orientats a la connexió A server uses two sockets: one for accepting connections, another for send/receive server client 1 connection socket data socket client 2 connection operation send/receive operaton 12 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

orientats a la connexio 1. Server establishes a socket sd1 with local address, then listens for incoming connection on sd1 server sd1 client Client establishes a socket with remote (server's) address. 2. Server accepts the connection request and creates a new socket sd2 as a result. sd1 sd2 13 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

orientats a la connexio 3. Server issues receive operation using sd2. sd1 sd2 Client issues send operation. 4. Server sends response using sd2. sd1 sd2 5. When the protocol has completed, server closes sd2; sd1 is used to accept the next connection sd1 Client closes its socket when the protocol has completed 14 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Diagrama de fluxe entre Servidor i Client Server 1 Create a connection Socket 2 Listen for connection requests 3 while (true): 4 Accept a connection 5 Creates a data socket for I/O stream socket 6 Get an InputStream for reading 7 Get an OuputStream for writing 8 while (not end): Do the protocol finally! Close the data socket Client 1 Create a data socket 2 Request for a Connection 3 Get an InputStream for reading 4 Get an OuputStream for writing 5 while (not end): 6 Do the protocol finally! Close the data socket finally! Close the connection socket 15 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Mètodes de l API ServerSocket Method/constructor ServerSocket(int port) Socket accept() throws IOException public void close() throws IOException void setsotimeout(int timeout) throws SocketException Description Creates a server socket on a specified port. Listens for a connection to be made to this socket and accepts it. The method blocks until a connection is made. Closes this socket. Set a timeout period (in milliseconds) so that a call to accept( ) for this socket will block for only this amount of time. If the timeout expires, a java.io.interruptedioexception is raised 16 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Mètodes de l API Socket Method/constructor Socket(InetAddress address, int port) void close() throws IOException InputStream getinputstream( ) throws IOException OutputStream getoutputstream( )throws IOException void setsotimeout(int timeout) throws SocketException Description Creates a stream socket and connects it to the specified port number at the specified IP address Closes this socket. Returns an input stream so that data may be read from this socket. Returns an output stream so that data may be written to this socket. Set a timeout period for blocking so that a read( ) call on the InputStream associated with this Socket will block for only this amount of time. If the timeout expires, a java.io.interruptedioexception is raised 17 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

I/O JAVA baix nivell Gestió d enviaments parcials Les funcions read no garanteixen la recepció de tots els caràcters que se ls sol licita. Això s ha de gestionar. p u b l i c class Socket { p u b l i c InputStream getinputstream ( ) } p u b l i c class InputStream{ p u b l i c i n t read ( byte [ ] b ) } Es bloqueja fins que hi hagi dades disponibles. Llegeix un nombre indeterminat de bytes i els guarda al buffer b. Com a molt llegeix el n. bytes = a la longitud del buffer b. Retorna el nombre de bytes realment llegits. Read() i getinputstream() poden llençar una IOException, socket tancat, no connectat... 18 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Exemples de tipus de dades 1 Escriure-Llegir sencers de 4 bytes per la xarxa. Ordre del bytes: BigEndian. Transformar sencer a 4 bytes amb ordre Be. Transformar 4 bytes amb ordre Be a sencer. DataOutputStream: writeint 2 Escriure-Llegir cadenes de càracters de mida fixa x Transformar un String de longitud x a x chars d un byte. (ignorar byte més alt) Transformar x chars d un byte a un string de longitud x. DataOutputStream: writebytes(string). 3 Escriure-Llegir cadenes de caràcters variables que codifiquen la seva longitud. Determinar longitud de la capçalera Escriure-Llegir el nombre de caràcters a/des de la capçalera Escriure-Llegir el nombre de caràcters especificat. 19 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Implementacions d exemple a ComUtils: Sencers import... p u b l i c class ComUtils { / Objectes per escriure i l l e g i r dades / p r i v a t e DataInputStream dis ; private DataOutputStream dos ; public ComUtils ( Socket socket ) throws IOException { dis = new DataInputStream ( socket. getinputstream ( ) ) ; dos = new DataOutputStream ( socket. getoutputstream ( ) ) ; } / L l e g i r un enter de 32 b i t s / public i n t read int32 ( ) throws IOException { byte bytes [ ] = new byte [ 4 ] ; bytes = read bytes ( 4 ) ; return bytestoint32 ( bytes, be ) ; } / E s c r i u r e un enter de 32 b i t s / public void write int32 ( i n t number ) throws IOException { byte bytes [ ] = new byte [ 4 ] ; int32tobytes ( number, bytes, be ) ; dos. w r i t e ( bytes, 0, 4 ) ; } } 20 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Implementacions d exemple a ComUtils: Llegir Bytes amb gestió enviament parcial p u b l i c class ComUtils {... } private byte [ ] read bytes ( i n t numbytes ) throws IOException{ i n t len =0 ; byte bstr [ ] = new byte [ numbytes ] ; do { len += dis. read ( bstr, len, numbytes len ) ; } while ( len < numbytes ) ; r e t u r n bstr ; } 21 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Implementacions d exemple a ComUtils: Transformacions p u b l i c class ComUtils {... / Passar d enters a bytes / private i n t int32tobytes ( i n t number, byte bytes [ ], String endianess ) { i f ( be. equals ( endianess. tolowercase ( ) ) ) { bytes [ 0 ] = ( byte ) ( ( number >> 24) & 0xFF ) ; bytes [ 1 ] = ( byte ) ( ( number >> 16) & 0xFF ) ; bytes [ 2 ] = ( byte ) ( ( number >> 8) & 0xFF ) ; bytes [ 3 ] = ( byte ) ( number & 0xFF ) ; } else{ bytes [ 0 ] = ( byte ) ( number & 0xFF ) ; bytes [ 1 ] = ( byte ) ( ( number >> 8) & 0xFF ) ; bytes [ 2 ] = ( byte ) ( ( number >> 16) & 0xFF ) ; bytes [ 3 ] = ( byte ) ( ( number >> 24) & 0xFF ) ; }r e t u r n 4;} / Passar de bytes a enters / private i n t bytestoint32 ( byte bytes [ ], String endianess ) { i n t number ; i f ( be. equals ( endianess. tolowercase ( ) ) ) { number = ( ( bytes [ 0 ] & 0xFF ) << 24) ( ( bytes [ 1 ] & 0xFF ) << 16) ( ( bytes [ 2 ] & 0xFF ) << 8) ( bytes [ 3 ] & 0xFF );} else{number=( bytes [ 0 ] & 0xFF ) ( ( bytes [ 1 ] & 0xFF ) << 8) ( ( bytes [ 2 ] & 0xFF ) << 16) ( ( bytes [ 3 ] & 0xFF ) << 24);} r e t u r n number;} } 22 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Implementacions d exemple a ComUtils: Strings mida fixe import... p u b l i c class ComUtils { / L l e g i r un s t r i n g de mida STRSIZE / public String read string ( ) throws IOException { String s t r ; byte bstr [ ] = new byte [ STRSIZE ] ; char cstr [ ] = new char [ STRSIZE ] ; bstr = read bytes (STRSIZE ) ; f o r ( i n t i = 0; i < STRSIZE ; i ++) cstr [ i ]= ( char ) bstr [ i ] ; str = String. valueof ( cstr ) ; r e t u r n s t r. t r i m ( ) ; } / E s c r i u r e un s t r i n g / public void w r i t e s t r i n g ( String s t r ) throws IOException { i n t numbytes, l e n S t r ; byte bstr [ ] = new byte [ STRSIZE ] ; l e n S t r = s t r. l e n gth ( ) ; i f ( lenstr > STRSIZE){numBytes = STRSIZE;} else { numbytes = lenstr ;} f o r ( i n t i = 0; i < numbytes ; i ++){ bstr [ i ] = ( byte ) s t r. charat ( i );} f o r ( i n t i = numbytes ; i < STRSIZE ; i ++){ bstr [ i ] = ( byte ) ;} dos. w r i t e ( bstr, 0,STRSIZE ) ; } } 23 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Implementacions d exemple a ComUtils: Llegir Strings mida variable p u b l i c class ComUtils {... } / Llegir un string mida variable size = nombre de bytes especifica la longitud / public String read string variable ( i n t size ) throws IOException { byte bheader [ ] = new byte [ size ] ; char cheader [ ] = new char [ size ] ; i n t numbytes =0; / / Llegim els bytes que indiquen la mida de l string bheader = read bytes ( size ) ; / / La mida de l string ve en format text, per tant creem un string i el parsejem f o r ( i n t i =0; i<size ; i ++){ cheader [ i ] = ( char ) bheader [ i ] ; } numbytes= I n t e g e r. parseint (new S t r i n g ( cheader ) ) ; / / Llegim l s t r i n g byte bstr [ ] = new byte [ numbytes ] ; char cstr [ ] = new char [ numbytes ] ; bstr = read bytes ( numbytes ) ; f o r ( i n t i =0; i<numbytes ; i ++){ cstr [ i ] = ( char ) bstr [ i ] ;} return String. valueof ( cstr ) ; } 24 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Implementacions d exemple a ComUtils: Escriure Strings mida variable p u b l i c class ComUtils {... public void write string variable ( i n t size, String str ) throws IOException { / / Creem una üèseqncia amb l a mida byte bheader [ ] = new byte [ size ] ; S t r i n g strheader ; i n t numbytes =0; / / Creem l a çcapalera amb e l nombre de bytes que c o d i f i q u e n l a mida numbytes= s t r. l e ngth ( ) ; strheader=string. valueof ( numbytes ) ; i n t len ; i f ( ( len=strheader. length ( ) ) < size ) f o r ( i n t i =len ; i< size ; i ++){ strheader= 0 +strheader ;} System. out. p r i n t l n ( strheader ) ; f o r ( i n t i =0; i<size ; i ++) bheader [ i ] = ( byte ) strheader. charat ( i ) ; / / Enviem l a çcapalera dos. w r i t e ( bheader, 0, size ) ; / / Enviem l string writebytes de DataOutputStrem / / no envia el byte éms a l t dels chars. dos. w r i t e B y t e s ( s t r ) ; } } 25 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Datagram-Mode sender process a byte array receiver process a byte array receiver's address a DatagramPacket object a DatagramPacket object a DatagramSocket object send receive a DatagramSocket object object reference data flow 26 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Diagrama de flux comunicació no orientada a la connexió de dos processos Si el datagama és enviat abans de que l operació de rebre sigui llançada, les dades seran descartades pel sistema i no seran rebudes. Client Server 1 Create a datagram socket 2 Bind it to any local port 3 Create a datagram packet with data array and receiver address 4 invoke socket Send with the datagram packet 1 Create a datagram socket 2 Bind it to any local port 3 Create a a datagram packet with data array 4 invoke socket Receive with the datagram packet 27 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

API de sockets Datagram-mode En Java, l API de sockets Datagram-mode proveix dues classes: DatagramSocket: per als sockets. DatagramPacket: per intercanviar datagrames. Un procés que vulgui enviar o rebre dades fent servir aquesta API ha de crear una instància d un objecte DatagramSocket. Cada socket està enllaçat a un port UDP de l equip local. 28 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Mètodes de l API de Datagrames Method/Constructor DatagramPacket (byte[ ] buf, int length) DatagramPacket (byte[ ] buf, int length, InetAddress address, int port) DatagramSocket ( ) DatagramSocket (int port) void close( ) void receive(datagrampacket p) void send (DatagramPacket p) void setsotimeout (int timeout) Description Construct a datagram packet for receiving packets of length length; data received will be stored in the byte array reference by buf. Construct a datagram packet for sending packets of length length to the socket bound to the specified port number on the specified host ; data received will be stored in the byte array reference by buf. Construct a datagram socket and binds it to any available port on the local host machine; this constructor can be used for a process that sends data and does not need to receive data. Construct a datagram socket and binds it to the specified port on the local host machine; the port number can then be specified in a datagram packet sent by a sender. Close this datagramsocket object Receive a datagram packet using this socket. Send a datagram packet using this socket. Set a timeout for the blocking receive from this socket, in milliseconds. 29 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

no orientats a la connexió Amb sockets sense connexió, és possible que diversos processos enviïn simultàniament datagrames al mateix socket establert per un procés de recepció, en aquest cas l ordre de l arribada d aquests missatges serà impredictible, d acord amb el protocol UDP. Process B Process B Process A Process A Process C Process C Figure 3a Figure 3b a connectionless datagram socket 30 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Tipus de servidors Paradigmes Aplicacions Distribuïdes Els servidors els podem categoritzar segons: Amb estat Vs Sense estat. Orientats a la connexió Vs No orientats a la connexió. Iteratius Vs Concurrents. 31 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Amb estat vs Sense estat Un servidor amb estat manté la informació de l estat de cada client actiu. El fet de mantenir aquesta informació pot reduir la quantitat de dades intercanviades i per tant, el temps de resposta. Codificar un servidor sense estat és més senzill. FTP server FTP server FTP Client FTP Client file ID file ID file position file position GET file name file ID send <file ID>, block 0 data from block 0 of file send <file ID>, block 1 data from block 1 of file... GET file name ready send next block data from block 0 of file send next block data from block 1 of file... 32 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Amb estat vs Sense estat Mantenir la informació d estat és dificultós amb presència d errors. FTP server file ID file position FTP Client GET file name ready send next block data from block 0 of file send next block data from block 1 of file... data is lost due to network failure client resubmits request client receives data as block 0 of file; the true block 0 is missed. 33 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Orientats a la connexió Vs No orientats a la connexió No orientats a la connexió Utilitza API Datagram-mode. Les sessions amb clients simultanis es poden intercalar. Orientat a la connexió Utilitza API Stream-mode. 34 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Diagrama d esdeveniments de Servidor No Orientat a la connexió EchoServer1 client 1 message echo message echo message echo client2 message echo message echo 35 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Exemple Client/Servidor No Orientat a la connexió amb java Exemple Client/Servidor UDP amb java 36 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Iteratius vs Concurrents Servidor Concurrent Fa servir diferents fils d execució per donar servei a diversos clients alhora. Pot fer servir Threads, Processos o una convinació de tots dos. Servidor iteratiu Només fa servir un sol fil d execució. Les sessions amb clients simultanis les pot fer o seqüencialment o fent servir operacions no-bloquejants (usant selector). 37 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Servidor orientat a la connexió Concurrent amb Threads server host A client process at the head of the connection queue service concurrent server process the main thread accepts connections the server connection queue a child thread processes the protocol for a client process A client process whose connection has been accepted A client process whose connection has been accepted 38 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Diagrama de seqüencia de Servidor orientat a la connexió amb Threads EchoServer3 EchoServer3 thread 1 EchoClient 1 EchoClient2 EchoServer3 thread 2 accept connection 39 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Diagrama d esdeveniments de Servidor orientat a la connexió amb Threads EchoServer3 client 1 message message echo echo message message echo echo message echo client2 40 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Threads amb JAVA Paradigmes Aplicacions Distribuïdes Threads amb JAVA 41 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Exemple Servidor orientat a la connexió amb Threads Source Code DateServer with Threads 42 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Diagrama d esdeveniments de Servidor orientat a la connexió iteratiu seqüencial EchoServer2 client 1 message echo message echo message echo client2 message echo message echo 43 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Exemple Servidor orientat a la connexió seqüencial Source Code Sequential Server Example 44 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Servidor orientat a la connexió iteratiu fent servir Selector Problema: Gestió de les operacions bloquejants (accept, read) Solució: Nonblocking InputOutput (nio) Link API java.nio 45 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Selector Paradigmes Aplicacions Distribuïdes 46 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Servidor orientat a la connexió iteratiu fent servir Selector Crear un ChannelSocket no bloquejant: ServerSocketChannel server = ServerSocketChannel.open(); server.socket().bind(new java.net.inetsocketaddress(8000)) server.configureblocking(false); Fer servir Selector per gestionar els canals: Selector selector = Selector.open(); SelectionKey serverkey = server.register(selector, SelectionKey.OP_ACCEPT); 47 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Exemple Servidor no Bloquejant fent servir Selector Source Code: ServerSelector ServerSelector GIST 48 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Consideracions d implementació Gestió d excepcions: Totes les excepcions s han de tractar de forma adequada amb un try catch. Cada tipus d excepció ha de tenir el seu propi catch. El finally després d un try catch s executa sempre, hi hagi o no excepció. Usar finally per tancar els sockets sempre un cop acabada la connexió. Tipus d excepcions d IO Broken pipe, No s ha pogut escriure perquè s ha desconnectat l altra part. (IOException) Socket propi tancat o no es pot crear, no es pot accedir al socket (SocketException) Socket timeout, s ha excedit el temps d espera en el socket propi ( InterruptedIOException) Protocol Excepetion Problema en la capa de TCP (ProtocolException) 49 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Consideracions d implementació Consulteu l API de JAVA de sockets per saber cada funció quina excepció llança Socket API 50 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Consideracions d implementació Gestió TimeOuts: Tot Socket de dades que realitzi operacions de read ha de tenir un TimeOut adequat. El temps del timeout no ha de ser gaire elevat. Preten trobar fallades en la connexió. Si fem una aplicació que pot tenir elevat temps d espera, llavors un cop s activa el timeout cal comprovar si l stream d entrada està disponible (available), en cas afirmatiu es torna a fer l operació de lectura. Gestió Threads: Els threads s han d acabar de forma natural, un cop acabada la seva tasca. Abans d acabar-se el thread, ha de tancar tots els sockets que tingués oberts. 51 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Comunicació unicast vs multicast Unicast: Enviament cap a un únic receptor TCP: establint connexió UDP: sense establir connexió, no fiable Multicast: Enviament cap a múltiples receptors. UDP: sense establir connexió, no fiable 52 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Comunicació multicast mitjançant datagrames IP multicast Construït a sobre del Internet Protocol (IP), Només disponible via UDP! No hi ha garanties de recepció. Permet enviar un paquet IP a un conjunt de màquines que formin un grup multicast. Grup multicast Identificat amb una adreça d internet de la Classe D: 224.0.0.0 fins 239.255.255.255. Quant una màquina s afegeix a un grup multicast, rep tots els missatges que s hi enviïn. Es poden enviar paquets sense formar-ne part. 53 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor

Exemple IP multicast amb java Exemple: java MulticastPeer Hola 224.0.0.1 * La IP 224.0.0.1 es refereix al grup multicast de la xarxa local. Source Code MulticastPeer 54 / 54 Eloi Puertas i Prats Software Distribuït - T4 - Client/Servidor