1213 Sockets [3] Programació

86
SÒCOLS Programació 3

Transcript of 1213 Sockets [3] Programació

Page 1: 1213 Sockets [3] Programació

SÒCOLS

Programació 3

Page 2: 1213 Sockets [3] Programació

SÒCOLS Creació

• El paquet java.net proporciona una classe Socket.

• De forma addicional, java.net inclou la classe

ServerSocket.

• La classe ServerSocket implementa un sòcol que

facilita que els servidors puguin escoltar i acceptar

peticions de connexions de clients.

Page 3: 1213 Sockets [3] Programació

SÒCOLS Model de comunicació amb Java

• El model de sòcols més senzill és:

① El servidor estableix un port i espera un cert temps (timeout

segons) a que el client estableixi la connexió.

② El client estableix una connexió amb la màquina host a través

del port que es designa en port#.

③ El client i el servidor es comuniquen amb manipuladors

InputStream i OutputStream.

Page 4: 1213 Sockets [3] Programació

SÒCOLS Model de comunicació amb Java

Servidor

ServerSocket(port#,timeo

ut)

accept()

OutputStream

InputStream

close()

Client

Socket(host,port#)

OutputStream

InputStream

close()

Page 5: 1213 Sockets [3] Programació

SÒCOLS Apertura de sòcols

• Si estem programant un CLIENT, el sòcol s’obre..:

Socket elMeuClient;

elMeuClient = new Socket(“Màquina”, numeroPort);

Màquina és el nom de la màquina en la que estem intentant obrir

la connexió.

numeroPort és el port del servidor que està corrent sobre el que

ens volem connectar.

Per les aplicacions que desenvolupem, haurem de seleccionar un

port per sobre del 1023.

Page 6: 1213 Sockets [3] Programació

SÒCOLS Apertura de sòcols

• En l’exemple anterior no s’utilizen excepcions. Ara

bé, és una bona opció si treballem amb sòcols.

Socket elMeuClient;

try {

elMeuClient = new Socket(“Màquina”, numeroPort);

} catch(IOException e) {

System.out.println(e);

}

Page 7: 1213 Sockets [3] Programació

SÒCOLS Apertura de sòcols

Page 8: 1213 Sockets [3] Programació

SÒCOLS Apertura de sòcols

Page 9: 1213 Sockets [3] Programació

SÒCOLS Apertura de sòcols

• Si estem programant un SERVIDOR, la forma

d’apertura del sòcol és..:

Socket elMeuServei;

try {

elMeuServei = new ServerSocket(numeroPort);

} catch(IOException e) {

System.out.println(e);

}

Page 10: 1213 Sockets [3] Programació

SÒCOLS Apertura de sòcols

Page 11: 1213 Sockets [3] Programació

SÒCOLS Apertura de sòcols

• A l’hora de implementar un servidor també

necessitem crear un objecte socket des del

ServerSocket que estigui al cas de les potencials

connexions.

Socket SocketServei = null;

try {

SocketServei = elMeuServei.accept();

} catch(IOException e) {

System.out.println(e);

}

Page 12: 1213 Sockets [3] Programació

SÒCOLS Apertura de sòcols

• Si volguéssim crear un sòcol servidor sobre el port

5776 que pugui contenir 100 connexions

d’entrada en la cua..:

try {

ServerSocket httpd = new ServerSocket (5776,

100);

} catch(IOException e) {

System.err.println(e);

}

Page 13: 1213 Sockets [3] Programació

SÒCOLS Creació d’Streams d’Entrada

• En la part del CLIENT de l’aplicació, es pot utilitzar la

classe DataInputStream per crear un stream d’entrada

que estigui preparat per rebre totes les respostes que

el servidor li enviï.

DataInputStream entrada;

try {

entrada = new DataInputStream(elMeuClient.getInputStream() );

} catch(IOException e) {

System.out.println(e);

}

Page 14: 1213 Sockets [3] Programació

SÒCOLS Creació d’Streams d’Entrada

• La classe DataInputStream permet la lectura de línies

de text i tipus de dades primitives de Java (read(),

readChar(), readInt(), readDouble() i readLine()).

DataInputStream entrada;

try {

entrada = new

DataInputStream(elMeuClient.getInputStream() );

} catch(IOException e) {

System.out.println(e);

}

Page 15: 1213 Sockets [3] Programació

SÒCOLS Creació d’Streams d’Entrada

• En el costat del SERVIDOR, també utilitzarem

DataInputStream però, en aquest cas, per rebre les

entrades que es produeixin dels clients que s’hagin

connectat:

DataInputStream entrada;

try {

entrada = new

DataInputStream(socketServei.getInputStream() );

} catch(IOException e) {

System.out.println(e);

}

Page 16: 1213 Sockets [3] Programació

SÒCOLS Creació d’Streams de Sortida

• En el costat del CLIENT, podem crear un stream de

sortida per enviar informació al sòcol del servidor

utilitzant les classes PrintStream o DataInputStream.

PrintStream sortida;

try {

sortida = new PrintStream(elMeuClient.getOutputStream()

);

} catch(IOException e) {

System.out.println(e);

}

Page 17: 1213 Sockets [3] Programació

SÒCOLS Creació d’Streams de Sortida

• La classe PrintStream té mètodes per la representació

de totes les dades primitives de Java (write i println()).

• Per l’enviament de informació al servidor també podem

utilitzar DataOutputStream..:

DataOutputStream sortida;

try {

sortida = new DataOutputStream (elMeuClient.getOutputStream() );

} catch(IOException e) {

System.out.println(e);

}

Page 18: 1213 Sockets [3] Programació

SÒCOLS Creació d’Streams de Sortida

• La classe DataOutputStream permet escriure qualsevol dels

tipus primitius de Java – escriuen un tipus de dada primitiva

en l’stream de sortida – (per exemple, writeBytes() ).

• En el costat del SERVIDOR, podem utilitzar PrintStream per

enviar informació al client..:

PrintStream sortida;

try {

sortida = new PrintStream (socketServei.getOutputStream() );

} catch(IOException e) {

System.out.println(e);

} Alerta: També podríem utilitzar la

classe DataOutputStream

Page 19: 1213 Sockets [3] Programació

SÒCOLS Tancament de Sòcols

• Sempre haurem de tancar els canals d’entrada i sortida que

s’hagin obert durant l’execució de l’aplicació.

• En la part del client..: try {

sortida.close();

entrada.close();

elMeuClient.close();

} catch(IOException e) {

System.out.println(e);

}

• En la part del servidor..: try {

sortida.close();

entrada.close();

socketServei.close();

elMeuServei.close();

} catch(IOException e) {

System.out.println(e);

}

Page 20: 1213 Sockets [3] Programació

SÒCOLS Tancament de Sòcols

• En la part del client..: try {

sortida.close();

entrada.close();

elMeuClient.close();

} catch(IOException e) {

System.out.println(e);

}

• En la part del servidor..: try {

sortida.close();

entrada.close();

socketServei.close();

elMeuServei.close();

} catch(IOException e) {

System.out.println(e);

}

• Primer, s’han de tancar els streams relacionats amb un socket abans que

el propi socket

• Així evitem possibles errors d’escriptura/lectura sobre descriptors ja

tancats.

Page 21: 1213 Sockets [3] Programació

SÒCOLS Programa Client

El programa client es

connecta a un servidor

indicant el nom de la

màquina i el número de port

en el que el servidor esta

instal·lat.

Page 22: 1213 Sockets [3] Programació

SÒCOLS Programa Servidor

El programa servidor

s’instal·la en un port

determinat, a l’espera de

connexions, a les que

tractarà mitjançant un segon

sòcol.

Page 23: 1213 Sockets [3] Programació

SÒCOLS Programa Servidor

• S’utilitza un objecte de la classe ServerSocket (skServidor) que

serveix per esperar les connexions en un port determinat

(PORT).

• S’utilitza un objecte de la classe Socket (skClient) que serveix

per gestionar una connexió amb cada client.

• Mitjançant un bucle for i la variable numCli es restringeix el

número de clients a 3. Per cada cop que en el port d’aquest

servidor aparegui un client, s’atén i s’incrementa el comptador.

Page 24: 1213 Sockets [3] Programació

SÒCOLS Programa Servidor

• Per atendre als clients s’utilitza la primitiva accept() de la classe

ServerSocket – és una rutina que crea un nou Socket (skClient)

per atendre a un client que s’ha connectat a aquest servidor.

• S’associa al socket creat (skClient) un flux de sortida

DataOutputStream d’escriptura seqüencial en el que s’escriu el

missatge a enviar al client.

• El tractament de les excepcions és molt reduït en aquest

exemple, únicament es captura i s’imprimeix el missatge que

inclou l’excepció mitjançant getMessage().

Page 25: 1213 Sockets [3] Programació

Sòcols

TCP

Comunicacions fiables

Circuit virtual

Page 26: 1213 Sockets [3] Programació

SÒCOLS CLIENT – SERVIDOR Orientat a connexió

• Estableix un camí virtual entre servidor i

client fiable. No hi ha pèrdues de informació ni duplicats

La informació arriba en el mateix ordre en

que s’envia.

• El client obre una sessió en el servidor i

aquest guarda un estat del client.

Page 27: 1213 Sockets [3] Programació

SÒCOLS CLIENT – SERVIDOR Orientat a connexió - Client

• Inicia la connexió amb el servidor.

• Especifica l’adreça IP i el port del procés

servidor.

• Defineix un sòcol per establir la connexió amb el

servidor.

Client

Sòcol client

Page 28: 1213 Sockets [3] Programació

SÒCOLS CLIENT – SERVIDOR Orientat a connexió - Servidor

• Ha d’estar en execució

• Ha d’haver creat un socket (1) per on rebre als

clients que connectin amb ell

• Espera a que algun client es connecti.

Client

Sòcol client

Servidor

Sòcol 1

Page 29: 1213 Sockets [3] Programació

SÒCOLS CLIENT – SERVIDOR Orientat a connexió - Connexió

Quan un client es connecta amb un servidor..:

• El servidor crea un nou sòcol (2) perquè el

procés servidor es comuniqui amb el client.

• Així, és possible que un servidor es comuniqui

amb varis clients.

Client

Sòcol client

Servidor

Sòcol 2

Sòcol 1

Bytes

Page 30: 1213 Sockets [3] Programació

CLIENTS TCP Classe Socket - Constructors

• Socket (InetAddress adreçaIP, int port)

• Socket (String NomHost, int port) Crea un sòcol (socket) i el connecta amb el servidor indicat.

• Socket (InetAddress adreçaIP, int port, InetAddress AdreçaLocal, int

PortLocal)

• Socket (String NomHost, int port, InetAddress AdreçaLocal, int PortLocal) Crea un sòcol (socket) i el connecta amb el servidor indicat

vinculant-lo a una adreça IP i ports locals en concret.

Page 31: 1213 Sockets [3] Programació

CLIENTS TCP Classe Socket - Alguns mètodes importants

InputStream getInputStream()

Proporciona un fluxe d’entrada per llegir del socket

OutputStream getOutputStream()

Proporciona un fluxe de sortida

close()

Tanca el sòcol

Page 32: 1213 Sockets [3] Programació

GESTIÓ DELS FLUXES D’entrada

InputStream és la classe per tots els fluxos d’entrada en bytes. Es pot llegir un byte: read() o un grup: read(byte[] b)

InputStreamReader converteix un flux d’entrada (en bytes) en un

flux de caràcters. Es pot llegir un caràcter: read() o un grup: read(char[] text)

BufferedReader És un magatzem per un flux d’entrada de caràcters.

Té el mètode readLine() per llegir una línia de caràcters.

Exemple:

Buffer

BufferedReader entrada = new BufferedReader(new InputStreamReader(s.getInputStream()));

entrada.readLine();

Page 33: 1213 Sockets [3] Programació

CLIENTS TCP Client TCP bàsic

Aquest client es connecta al servidor FTP (port 21) i visualitza la

primera línia que rep del servidor.

A continuació, tanca la connexió.

Quina sortida es genera? 220 Microsoft FTP Service

Page 34: 1213 Sockets [3] Programació

GESTIÓ DELS FLUXES De sortida

OutputStream admet un flux de bytes Es pot escriure un byte: write(int b) o un grup: write(byte[] b)

PrintWriter permet enviar text (caràcters) Té mètodes que permeten escriure una línia de text: print(String s) i

println(String s)

Exemple:

Línies Bytes

PrintWriter sortida = new PrintWriter(s.getOutputStream()); sortida.print (“GET / HTTP /1.0” + “\r\n”);

Page 35: 1213 Sockets [3] Programació

CLIENTS TCP Client TCP bàsic (2)

Envia una petició HTTP al servidor www.upv.es

Quina sortida es genera? HTTP/1.0 200 OK

Page 36: 1213 Sockets [3] Programació

SERVIDORS TCP Classe ServerSocket - Constructors

ServerSocket (int port) Obre un sòcol en el port indicat en mode d’escolta

Si port=0, llavors s’escull qualsevol port lliure

ServerSocket(int port, int backlog)

Obre un sòcol (socket) en el port indicat en mode

d’escolta

backlog indica la longitud màxima de la cua de

connexions a l’espera

Quan arriba una sol·licitud de connexió i la cua es troba

plena, es rebutjarà la connexió.

Page 37: 1213 Sockets [3] Programació

SERVIDORS TCP Classe ServerSocket - Alguns mètodes importants

Socket accept () Accepta una connexió d’un client i retorna un socket associat a

ella El procés es bloqueja fins que es realitza una connexió El diàleg amb el client es fa pel nou socket El ServerSocket pot atendre noves connexions

Socket close ()

Tanca el socket servidor

Page 38: 1213 Sockets [3] Programació

SERVIDORS TCP Servidor TCP

soc_ client soc_servidor

soc_client=new Socket(..)

soc_ client

in.readLine()

out.print()

soc_ client

soc_client.close()

soc_servidor

soc_servidor

Page 39: 1213 Sockets [3] Programació

SERVIDORS TCP Servidor TCP (2)

Servidor iteratiu: Atent contínuament a nous clients A cadascun d’ells els enviaria una cadena amb el

seu número del cient i després tancarà el sòcol

Page 40: 1213 Sockets [3] Programació

CREACIÓ D’OBJECTES STREAM Comunicació client / servidor

Servidor

• Un cop que el servidor ha creat un canal (socket) per escoltar, ja es pot

comunicar amb el client.

• Com que el servidor rebrà dades, associa un fluxe d’entrada de dades

(InputStream) a aquest canal.

• I un filtre (DataInputStream) que permet transformar la codificació de les

dades – per exemple, en UTF (Unicode Transfer Format) - i el transforma en

un String.

• En conseqüència, hem creat un fluxe d’entrada de dades. Ara bé, en podrem

crear dos : un d’entrada i un de sortida.

InputStream soc_entrant;

.

.

eoc_entrant = sk.getInputStream()

DataInputStream dis;

.

.

dis = new dataInputStream(soc_entrant);

Page 41: 1213 Sockets [3] Programació

CREACIÓ D’OBJECTES STREAM Comunicació client / servidor

Associem un fluxe d’entrada de dades al canal de comunicació

Agafem el fluxe

d’entrada i apliquem un filtre

I Codifiquem les dades en UTF i les transformem en un string

Page 42: 1213 Sockets [3] Programació

CREACIÓ D’OBJECTES STREAM Comunicació client / servidor

Client

• Un cop obert el socket, associem un fluxe de sortida (OutputStream) i

un filtre (DataOutputStream) que servirà per transformar un String a

UTF.

OutputStream soc_sortint;

DataOutputStream dos;

.

.

soc_sortint = sk.getOutputStream();

dos = new DataOutputStream (soc_sortint)

.

.

dos.writeUTF(miss)

Page 43: 1213 Sockets [3] Programació

CREACIÓ D’OBJECTES STREAM Comunicació client / servidor

Associem un fluxe de

sortida i un filtre

Proporcionem un

fluxe de sortida

Page 44: 1213 Sockets [3] Programació

CREACIÓ D’OBJECTES STREAM Creació Streams de sortida

InputStream &

OutputStream

Page 45: 1213 Sockets [3] Programació

INTERACCIÓ CLIENT / SERVIDOR TCP

Client

Servidor

Page 46: 1213 Sockets [3] Programació

INTERACCIÓ CLIENT / SERVIDOR Exemple de servidor TCP (echo)

Page 47: 1213 Sockets [3] Programació

INTERACCIÓ CLIENT / SERVIDOR Exemple de client TCP (echo)

Page 48: 1213 Sockets [3] Programació

INTERACCIÓ CLIENT / SERVIDOR Cicle de vida d’un sòcol TCP

CLOSED

SYN_SENT TIME_WAIT

ESTABLISHED FIN_WAIT_2

FIN_WAIT_1

L’aplicació client arrenca una connexió TCP

Rep el SYN & ACK Envia l’ACK

Envia el senyal de finalització de l’espera Rep l’ACK

No envia res

Rep el senyal de FI Envia l’ACK

Espera 30 segons

Cicle de vida del client TCP

Page 49: 1213 Sockets [3] Programació

INTERACCIÓ CLIENT / SERVIDOR Cicle de vida d’un sòcol TCP

CLOSED

LISTEN TIME_WAIT

SYN_RCVD CLOSE_WAIT

ESTABLISHED

L’aplicació servidor Crea un sòcol receptor

Rep el SYN Envia el SYN i l’ACK

Rep l’ACK No envia res Rep el FI

Envia l’ACK

Envia el FI

Rep l’ACK No envia res

Cicle de vida del servidor TCP

Page 50: 1213 Sockets [3] Programació

INTERACCIÓ CLIENT / SERVIDOR Cicle de vida d’un sòcol TCP

Page 51: 1213 Sockets [3] Programació

INTERACCIÓ SÒCOLS TCP Excepcions

BindException: Es dóna quan s’intenta construir un sòcol sobre un port en ús o si no es tenen privilegis per fer-ho.

ConnectException: Es dóna quan el host remot rebutja la

connexió

NoRouteToHostException: Es dóna quan ha expirat el temps

d’establiment de la connexió.

SocketException: Es dóna quan hi ha un error en el socket.

UnknownHostException: Es dóna si no troba la màquina

amb la que vol establir la connexió.

Page 52: 1213 Sockets [3] Programació

Sòcols

UDP

Comunicacions no fiables

Page 53: 1213 Sockets [3] Programació

INTERACCIÓ CLIENT / SERVIDOR Classe InetAddress

• Java proporciona la clase InetAddress per administar les

adreces IP i els dominis. Alguns dels mètodes que podem

trobar són els següents:

byte[] getAddress() ; Retorna l’adreça IP d’un objecte InetAddress.

InetAddress getByName(String host) ;

Retorna un objecte InetAddress.

static InetAddressgetByAddress(byte[] adreça) ;

Introduim una adreça IP i ens retorna un obbjecte amb aquesta

adreça.

Page 54: 1213 Sockets [3] Programació

INTERACCIÓ CLIENT / SERVIDOR Classe InetAddress (2)

• Java proporciona la clase InetAddress per administar les adreces IP

i els dominis. Alguns dels mètodes que podem trobar són els

següents:

static InetAddressgetByAddress(String host, byte[] addr) ; Introduim una adreça IP i ens retorna un objecte amb aquesta adreça

i també guarda el host.

InetAdress getLocalHost() ;

Retorna un objecte amb l’adreça IP local de l’equip.

Page 55: 1213 Sockets [3] Programació

INTERACCIÓ CLIENT / SERVIDOR Classe InetAddress – Exemple (1a part)

Page 56: 1213 Sockets [3] Programació

INTERACCIÓ CLIENT / SERVIDOR Classe InetAddress – Exemple (2a part)

Page 57: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ

• Enviament de datagrames de grandària fixa.

• No és fiable, poden haver-hi pèrdues de informació i duplicats.

• La informació pot arribar en diferent ordre del que s’ha enviat.

Emissor

DatagramSocket

Receptor

DatagramSocket

DatagramPacket

Page 58: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ

• En UDP no hi ha handshaking.

• El remitent indica explícitament

l’adreça IP i el port d’origen i destí en

cada paquet.

• El recpetor ha d’extreure del paquet

rebut l’adreça IP i el port de l’emissor.

• Les dades transmeses poden arribar

fora d’ordre o, inclús, perdre’s.

Page 59: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Interacció CLIENT - SERVIDOR

Client

Servidor

Page 60: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Interacció CLIENT - SERVIDOR

Inte

racc

del

usu

ari

Envi

a Pa

qu

et

Rep

Pa

qu

et

Client UDP

Socket

Paquet UDP

Paquet UDP

Sòcol UDP

XARXA

SORTIDA: S’envia un paquet (RECORDEU: En TCP, s’enviava un flux de Bytes)

ENTRADA: Es rep un paquet (RECORDEU: En TCP, es rebia un flux de Bytes)

Page 61: 1213 Sockets [3] Programació

CLASSE DatagramSocket Constructors

• Un objecte java.DatagramSocket és un connector

mitjançant el qual enviarem i rebrem paquets UDP.

• Si volem utilitzar un DatagramSocket per rebre

paquets es necessita especificar el port.

• Al contrari, si és per enviar paquets, no cal

especificar aquest port.

Page 62: 1213 Sockets [3] Programació

CLASSE DatagramSocket Serveis

public void send (DatagramPacket p)

Envia un datagrama a la màquina remota pel

sòcol (socket) associat.

public void receive (DatagramPacket p)

Rep un datagrama d’una altra màquina pel sòcol

(socket) associat.

Page 63: 1213 Sockets [3] Programació

CLASSE DatagramSocket Comunicacions UDP: Constructors

DatagramPacket (byte buf[ ], int longitud)

Crea un datagrama UDP a partir d’aquest buffer i

amb aquesta longitud.

DatagramPacket (byte buf[ ], int longitud,

InetAddress Adreça_IP, int port)

Crea un datagrama UDP amb aquest buffer i

d’aquesta longitud per enviar-lo a l’adreça IP i el

port que s’indica.

Page 64: 1213 Sockets [3] Programació

CLASSE DatagramSocket Comunicacions UDP: Constructors

DatagramSocket ( )

Crea un sòcol UDP que escolta en un port lliure.

DatagramPacket (int port)

Crea un sòcol UDP que escolta en aquest port.

Page 65: 1213 Sockets [3] Programació

CLASSE DatagramSocket Exemple

DatagramSocket dsk1 = new DatagramSocket (123); // Aquí utilitzem aquest DatagramSocket per rebre dades..

.

.

// Hem acabat; tanquem el socket

dsk1.close();

DatagramSocket dsk2 = new DatagramSocket (); // Aquí l’utilitzem per transmetre dades

.

.

// Hem acabat; tanquem el socket

dsk2.close();

Page 66: 1213 Sockets [3] Programació

CLASSE DatagramSocket Exemple de Datagrama

Page 67: 1213 Sockets [3] Programació

CLASSE DatagramSocket Serveis

public void connect(InetAddress address, int port)

Connecta el socket a la màquina remota amb la @IP address i el

port port.

public void close ()

Tanca el canal de comunicació

public InetAddress getInetAddress()

Retorna la @IP de la màquina remota.

public int getPort()

Retorna el port de la màquina remota.

També hi ha dos crides per conèixer la @IP i el port local:

getLocalAddress() i getLocalPort().

Page 68: 1213 Sockets [3] Programació

ORIENTAT A CONNEXIÓ Exercici 1: [Client – Servidor] Majúscules

• L’usuari (CLIENT) escriu una lína de text

• El programa (CLIENT) envia la línia al servidor

• El SERVIDOR rep la línia de text

• Posa en majúscules totes les lletres

• Envia la línia modificada al CLIENT

• El SERVIDOR rep la línia de text

• Posa en majúscules totes les lletres

• Envia la línia modificada al CLIENT

• El CLIENT rep la línia de text

• Mostra la línia de text

Page 69: 1213 Sockets [3] Programació

ORIENTAT A CONNEXIÓ Exercici 1: [Client – Servidor] Majúscules

1) El client llegeix les línies de flux des de l’entrada estàndard (flux entradaDelUsuari) i les envia al servidor mitjançant un sòcol (flux dadesPelServidor)

2) El servidor llegeix les línies des del sòcol

3) El servidor les converteix a majúscules i les envia de tornada al client

4) El client llegeix i mostra la línia modificada des del sòcol (flux RespostaDelServidor)

Page 70: 1213 Sockets [3] Programació

ORIENTAT A CONNEXIÓ Exercici 1: [Client – Servidor] Majúscules

Client

servidor

Page 71: 1213 Sockets [3] Programació

ORIENTAT A CONNEXIÓ Exercici 1: [Client – Servidor] Majúscules

Creem el flux entrant

Creem el socket client per

connectar amb el servidor

Creem el flux de sortida, connectat al socket

Page 72: 1213 Sockets [3] Programació

ORIENTAT A CONNEXIÓ Exercici 1: [Client – Servidor] Majúscules

Creem el flux d’entrada, connectat al socket

Enviem la línia al servidor

Llegim la línia que arriba des del

servidor

Page 73: 1213 Sockets [3] Programació

ORIENTAT A CONNEXIÓ Exercici 1: [Client – Servidor] Majúscules

Creem el sòcol de benvinguda en el port 7777

Creem el sòcol per la connexió de contacte

amb els clients

Creem el flux d’entrada connectat

al socket

Page 74: 1213 Sockets [3] Programació

ORIENTAT A CONNEXIÓ Exercici 1: [Client – Servidor] Majúscules

Creem el flux de sortida

connectat al socket

Llegeix la línia des del socket

Escriu la línia en el socket

Page 75: 1213 Sockets [3] Programació

ORIENTAT A CONNEXIÓ Exemple: Execució de comandes des de Java

Page 76: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Sockets UDP: Model client - servidor

I si volguéssim crear 2 mètodes que ens encapsulessin

una comunicació? UDP. Establiment, enviament o recepció

d’strings i tancament de la comunicació.

Envia Rep

Missatge

Grandària missatge

Grandària missatge

Missatge

Page 77: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Sockets UDP: Model client - servidor

• El datagrama Paquet es pot comparar amb un sobre que conté

l’adreça de destí i la carta (les dades).

• El sòcol ElMeuSocket el podem comparar amb una bústia de

correus. Amb el mètode send estarem “dipositant el sobre en la

bústia”.

Page 78: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Sockets UDP: Model client - servidor

Definim el datagrama

amb les dades a

enviar (llargària,

adreça IP i port)

Enviem el datagrama al

“servidor”

• El datagrama Paquet es pot comparar amb un sobre que conté

l’adreça de destí i la carta (les dades).

• El sòcol ElMeuSocket el podem comparar amb una bústia de

correus. Amb el mètode send estarem “dipositant el sobre en la

bústia”.

Page 79: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Sockets UDP: Model client - servidor

• Un cop hem definit els objectes DatagramSocket i DatagramPacket ja

podem rebre (mètode receive) la informació.

• Amb el mètode getData recuperarem les dades; aquesta acció és similar a

obrir el sobre i treure la carta.

Page 80: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Sockets UDP: Model client - servidor

Definim el socket de

datagrama en el port

14000

Definim l’espai per

rebre els

datagrames

Rebem el datagrama

• Un cop hem definit els objectes DatagramSocket i DatagramPacket ja

podem rebre (mètode receive) la informació.

• Amb el mètode getData recuperarem les dades; aquesta acció és similar a

obrir el sobre i treure la carta.

Page 81: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Exercici 1Bis: [Client – Servidor] Majúscules

Definim el flux entrant

Definim el socket client

Traduïm el localhost a IP mitjançant DNS

Page 82: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Exercici 1Bis: [Client – Servidor] Majúscules

Creem el datagrama amb les dades a enviar (llargària, adreça IP i port)

Enviem el datagrama al servidor

Llegim el datagrama que ens ha enviat el servidor

Page 83: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Exercici 1Bis: [Client – Servidor] Majúscules

Definim un socket de datagrama en el port

9876

Definim l’espai per rebre el datagrama

Rebem el datagrama

Page 84: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Exercici 1Bis: [Client – Servidor] Majúscules

Obtenim l’adreça IP i el port del client

Creo el datagrama a enviar al client

Envio el datagrama mitjançant el socket

Finalitza el cos del While, torna al seu inici i espera un

altre datagrama

Page 85: 1213 Sockets [3] Programació

ORIENTAT A CONNEXIÓ Client – Servidor TCP: Enviament d’arxius

Page 86: 1213 Sockets [3] Programació

NO ORIENTAT A CONNEXIÓ Client – Servidor UDP: Enviament d’arxius