domingo, 8 de octubre de 2017

Sockets

Hoy en día, gracias al desarrollo de la tecnología se ha podido crear métodos de comunicación cada vez más sofisticados y accesibles. Uno de los métodos más utilizados son los protocolos TCP/IP  y en menor medida UDP. Estos protocolos de comunicación han permitido que el envío y recibo de información sea mucho más rápida y eficiente que los pasados métodos, ahora obsoletos. Tanto el protocolo TCP, como el UDP tienen una característica en común, el uso de sockets.


Un socket de red es un punto de inicio o final del flujo de la información entre dos procesos regularmente desde dos computadores distintos. Estos tienen dos diferentes usos de acuerdo a su función; puede ser un socket de cliente, que busca al otro tipo de socket, el de servidor para establecer una conexión y así, permitir el flujo de la información.
Su implementación en JAVA incluye la biblioteca Java.net que proporciona tanto los sockets TCP como UDP.


Para el protocolo TCP existen dos clases: la clase Socket, la cual implementa los sockets de cliente y la ServerSocket, que implementa los sockets de servidor. Por su parte, el protocolo UDP cuenta con las clases DatagramPacket, la clase que representa un paquete datagrama y DatagramSocket, clase representa un socket para enviar y recibir paquetes datagrama.

El siguiente es un ejemplo sencillo de la implementación de sockets y crear una conexión  mediante el protocolo TCP:

public class Conexion { private final int PUERTO = 1234; //Puerto para la conexión private final String HOST = "localhost"; //Host para la conexión protected String mensajeServidor; //Mensajes entrantes (recibidos) en el servidor protected ServerSocket ss; //Socket del servidor protected Socket cs; //Socket del cliente protected DataOutputStream salidaServidor, salidaCliente; public Conexion(String tipo) throws IOException //Constructor { if(tipo.equalsIgnoreCase("servidor")) { ss = new ServerSocket(PUERTO) cs = new Socket(); } else { cs = new Socket(HOST, PUERTO); } } }
--------------------------------------------------------------------------------------------------------------------------
Para crear una clase para el servidor se implementa el siguiente código:

public class Servidor extends Conexion { public Servidor() throws IOException{super("servidor");} public void startServer()//Método para iniciar el servidor { try { System.out.println("Esperando..."); cs = ss.accept(); System.out.println("Cliente en línea"); salidaCliente = new DataOutputStream(cs.getOutputStream()); salidaCliente.writeUTF("Petición recibida y aceptada"); BufferedReader entrada = new BufferedReader(new InputStreamReader(cs.getInputStream())); while((mensajeServidor = entrada.readLine()) != null) { //Se muestra por pantalla el mensaje recibido System.out.println(mensajeServidor); } System.out.println("Fin de la conexión"); ss.close(); } catch (Exception e) { System.out.println(e.getMessage()); } } }

Así es como se crea una conexión simple mediante sockets con el protocolo TCP.

No hay comentarios:

Publicar un comentario