Está en la página 1de 6

SOCKET: Es el punto final de una comunicación entre procesos, donde se

encuentran la capa de transporte y el programa de aplicación.

Los sockets proporcionan una comunicación de dos vías, punto a punto entre dos
procesos. Los sockets son muy versátiles y son un componente básico de
comunicación entre interprocesos e intersistemas. Un socket es un punto final de
comunicación al cual se puede asociar un nombre. Este tiene un tipo y uno o más
procesos asociados.

Los sockets existen en los dominios de comunicación. Un socket de dominio es


una representación que da una estructura de direccionamiento y un conjunto de
protocolos. Los sockets se conectan solamente con sockets en el mismo dominio.
Los tipos de socket definen las propiedades de comunicación visibles para la
aplicación. Los procesos se comunican solamente entre los sockets del mismo
tipo.

Es un mecanismo de comunicación punto a punto entre dos procesos sobre el


protocolo TCP/IP. Desde el punto de vista de programación, un socket no es más
que un "fichero" que se abre de una manera especial. Una vez abierto podemos
leer y escribir con las funciones específicas para tal fin.

Existen dos tipos de comunicación: la orientada a la conexión y la no orientada a


la conexión. En el primer caso se debe establecer la conexión entre ambos
procesos mediante un socket para poder transmitir. En este caso se utiliza el
protocolo TCP, el cual es un protocolo confiable que asegura que los datos
transmitidos llegan de un proceso a otro correctamente. En el segundo caso se
utiliza el protocolo UDP, que garantiza que los datos que llegan son correctos pero
no que lleguen todos. En este caso un proceso envía datos sin la necesidad de
que el otro se encuentre escuchando.

Un ejemplo sería el de los procesos será el Servidor y se encontrará en estado de


escucha a la espera de recibir una conexión del proceso Cliente. Para realizar una
conexión entre un cliente y un servidor mediante sockets debemos conocer la
dirección IP de la máquina servidor y el puerto que identifica el servicio al cual nos
queremos conectar (desde el 1 al 1023 están reservados para servicios conocidos
quedando libres hasta el 65535).

EJEMPLO DE PROTOCOLO UTILIZANDO SOCKETS

ESQUEMA DE COMUNICACIÓN SIMPLE MEDIANTE SOCKETS


ESQUEMA DE COMUNICACIÓN CONCURRENTE MEDIANTE SOCKETS

Los pasos a seguir para crear una aplicación cliente/servidor con sockets son:
1. Creación del servidor
2. Creación del cliente
3. Compilación y ejecución
Tipos de Socket

 Sockets Stream (sockets TCP): Los sockets orientados a conexión que


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

Comunicación mediante Socket

 Para establecer una comunicación en red debemos conocer lo siguiente:


 Protocolo de comunicación (TCP o UDP).
 Dirección del emisor (dirección IP + puerto).
 Dirección del receptor (dirección IP + puerto).
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.

 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.
 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.

 Tipos de 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.

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

 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.
 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)

 Envío y recepción de caracteres


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

También podría gustarte