You are on page 1of 7

Programación con Sockets

Definición de Socket

„ Socket: punto final de una comunicación entre


procesos, donde se encuentran la capa de transporte
y el programa de aplicación.

MUNDO

Usuario Caja de Caja de Usuario


Cartero Cartero
emisor correo correo receptor

Transporte
Socket
Aplicación

A.R.S.S. 1

1
Tipos de Socket

„ Sockets Stream (sockets TCP): sockets


orientados a conexión que proporcionan una
comunicación bidireccional y fiable.
„ Sockets Datagrama (sockets UDP): sockets
no orientados a conexión que proporcionan una
comunicación bidireccional no fiable.
„ Socket Raw: sockets que dan acceso directo a
protocolos de nivel más bajo que soportan la
abstracción de socket.

A.R.S.S. 2

Comunicación mediante Socket

„ Para establecer una comunicación en red debemos


conocer:
„ Protocolo de comunicación (TCP o UDP).

„ Dirección del emisor (dirección IP + puerto).

„ Dirección del receptor (dirección IP + puerto).

Dir. IP Puerto Dir. IP Puerto


Protocolo
Emisor Emisor Receptor Receptor

A.R.S.S. 3

2
Comunicación Orientada a la Conexión
Servidor Cliente

Crear socket de escucha

Socket = <protocolo, Esperar peticiones y crear estableciendo Crear socket de conexión


dir. IP servidor, socket para transmisión conexión al servidor
puerto servidor,
-,
-> intercambio
L/E datos información L/E datos

desconexión
Cerrar el socket de Cerrar el socket
transmisión
O Socket = <protocolo,
dir. IP servidor,
Cerrar el socket de puerto servidor,
escucha dir. IP cliente,
puerto cliente>

Socket = <protocolo,
dir. IP servidor,
puerto servidor,
dir. IP cliente,
puerto cliente>

A.R.S.S. 4

Comunicación Orientada a la Conexión

„ Clase InetAddress
„ Contiene las direcciones de Internet de una
máquina.
„ Pertenece al package java.net
„ Es necesario importarla si se quiere utilizar.

A.R.S.S. 5

3
Comunicación Orientada a la Conexión

„ Clase InetAddress
„ Construcción de un objeto InetAddress
„ InetAddress getLocalHost()

„ InetAddress getByName(String host)

„ InetAddress[] getAllByName(String host)

„ Métodos más relevantes


„ String getHostAddress(): retorna la dirección IP.

„ String getHostName(): retorna el nombre de la

máquina.
„ String toString(): retorna un string con el nombre de la

máquina y la dirección IP.

A.R.S.S. 6

Comunicación Orientada a la Conexión

„ Clase Socket
„ Implementa los sockets de la parte cliente en una
comunicación basada en la conexión.
„ Pertenece al package java.net
„ Es necesario importarla si se quiere utilizar.

A.R.S.S. 7

4
Comunicación Orientada a la Conexión

„ Clase Socket
„ Constructores
„ Socket(String host, int port)

„ Socket(InetAddress address, int port)

„ Métodos más relevantes


„ InetAddress getInetAddress(): retorna la máquina

destino.
„ InetAddress getLocalAddress(): retorna la máquina local.
„ int getPort(): retorna el puerto destino.
„ int getLocalPort(): retorna el puerto local.
„ InputStream getInputStream(): retorna el flujo de
entrada (lectura) del socket.
„ OutputStream getOutputStream(): retorna el flujo de
salida (escritura) del socket.
„ void close(): cierra el socket.
A.R.S.S. 8

Comunicación Orientada a la Conexión

„ Clase ServerSocket
„ Implementa un socket del servidor orientado a
conexión.
„ Pertenece al package java.net
„ Es necesario importarla si se quiere utilizar.

A.R.S.S. 9

5
Comunicación Orientada a la Conexión

„ Clase ServerSocket
„ Constructores
„ ServerSocket(int port)

„ ServerSocket(int port, int max)

„ Métodos más relevantes


„ Socket accept(): pone el socket servidor a la escucha de

peticiones y cuando llega una petición la acepta,


retornando el socket a usar en la comunicación.
„ InetAddress getInetAddress(): retorna la máquina

cliente.
„ int getLocalPort(): retorna el puerto del servidor.

„ void close(): cierra el socket.

A.R.S.S. 10

Comunicación Orientada a la Conexión

Servidor Cliente

sEscucha = ServerSocket(p)

sPeticion = sEscucha.accept() estableciendo sConexion = Socket(host, p)


conexión

intercambio
out = sPeticion.getOutputStream() in = sConexion.getInputStream()
in = sPeticion.getInputStream() out = sConexion.getOutputStream()
información

sPeticion.close() desconexión sConexion.close()

O
sPeticion.close()

A.R.S.S. 11

6
Comunicación Orientada a la Conexión

„ Envío y recepción de bytes


„ Clases InputStream y OutputStream
„ InputStream

„ int read()
„ int read(byte [] buffer)
„ int read(byte [] buffer, int offset, int len)
„ OutputStream
„ void write(int b)
„ void write(byte [] buffer)
„ void write(byte [] buffer, int offset, int len)
„ Clases DataInputStream y DataOutputStream
(recordar gestión de ficheros)

A.R.S.S. 12

Comunicación Orientada a la Conexión

„ Envío y recepción de caracteres


„ Clases BufferedReader y PrintWriter (recordar
gestión de ficheros)

A.R.S.S. 13

You might also like