Ir al contenido principal

Protocolos, qué son?

 En el pasado (y en el presente también) siempre he querido incluir en el contenido de la materia de estructura de datos la posibilidad de hacer un práctico que tenga que ver con redes. Este breve artículo trata de cómo se pueden conectar dos computadoras en red y de las bases por las cuales tenemos protocolos. Veremos:

  • Significado de las direcciones IP y conceptos muy básicos de redes
  • Cómo usar sockets para abrir canales de comnicación entre dos computadoras
  • Concepto de un protocolo y de cómo podemos usar uno para hacer un chat básico

Conceptos básicos de redes

Si eres de sistemas o te interesan las computadoras pues probablemnte el concepto de conectar dos computadoras en la red parece algo tan sencillo como respirar. Sin embargo, hasta mediados de los 90 era algo que: 1) era complejo; 2) tenía atisbos de magia negra. Por suerte con el tiempo esto se ha ido masificando y ahora es algo muy sencillo.

Para poder conectarnos con otra computadora debemos conocer la dirección y el puerto de esa otra computadora. Las direcciones vienen en forma de 4 grupos de números de 0 a 255, a esto se llama una dirección IP; e.g. 158.29.46.23. El problema es que es muy dificil aprenderse de memoria estos números. Por ello nos inventamos el DNS (Domain Name Service); esta es una base de datos distribuida entre basicamente todos los dispositivos que están conectados que mapea una dirección IP contra un nombre que sea más fácil de acordarse.

Entonces, si tratamos de hacer contacto con el servidor www.google.com lo hacemos desde la línea de comando de la siguiente manera:


Así se puede ver que mapea el nombre www.google.com con la dirección IP (Internet Protocol) 142.250.0.104. 

El dato que nos falta es saber cual es el puerto al cual nos conectamos. El puerto es un número del 1 al 65535. Y en general se puede utilizar cualquier puerto desde el 2048 (los anteriores están siendo utilizados por protocolos estándar).
https://www.google.com
Esta dirección tiene la IP (como ya hemos visto) y también tiene el puerto que está dado por el término https. Por defecto, para el protocolo HTTPS, el puerto es 443.

Programación de conexión con Sockets en Java

Los sockets nos permiten abrir canales de comunicación de bajo nivel con otras computadoras. Depende de si queremos esperar una conexión o si queremos conectarnos:

  • SocketServer: Es un objeto que nos permite esperar por una conexión. Cuando alguien se conecta al puerto que está escuchando el objeto, entonces nos devuelve un socket.
  • Socket: Es un objeto que tiene dos canales, uno de entrada y otro de salida. Sobre uno de ellos leemos lo que nos envía la otra computadora conectada; y sobre el otro podemos escribir lo que querramos a la otra computadora.
En esta ocasión vamos a transformar nuestro canal de entrada y salida del socket (que son básicamente dos streams) a objetos decorados que nos permiten escribir texto con un salto de línea al final.

    ServerSocket srv = new ServerSocket(4949);
    Socket sck = srv.accept();

    PrintWriter out = new PrintWriter( sck.getOutputStream());
    InputStreamReader reader = new InputStreamReader(sck.getInputStream());
    BufferedReader in = new BufferedReader(reader);

    String nombre = in.readLine();
    System.out.println(" --LLEGA-- " + nombre);
    out.println("Hola, como estas " + nombre);
    out.flush();
    System.out.println(" --VA-- Hola, como estas " + nombre);
    sck.close();
    srv.close();  

Protocolo

Finalmente llegamos al punto que queríamos llegar, qué es un protocolo. Cuando se conectan dos computadoras, se tienen que poner de acuerdo cuales son los comandos y los tipos de mensajes que se pueden intercambiar entre las dos.

Si quisiéramos hacer un simple chat, el protocolo más simple que se nos puede ocurrir es que cada vez que queremos enviar un mensaje a la otra computadora enviamos el texto:

  MSG texto cualquiera  

Mientras las dos computadoras estan conectadas se están enviando mensajes con ese comando. Cuando una de las dos desea cortar la comunicación entonces puede enviar el mensaje:

  EXIT  

Nuestro protocolo consiste de dos comandos MSG y EXIT. El primero acepta un argument que es justamente el mensaje a enviar y el segundo es sin argumentos.

En el caso de que necesitemos que mensajes sean enviados de una computadora a otra y no tenemos un protocolo oficial, nosotros debemos crear ese protocolo y darle reglas de negocio a cada uno de los comandos que aceptemos en el protocolo.

Comentarios

Entradas más populares de este blog

Nuget muy grande en tu carpeta personal

Problema : Veo que mi disco duro C ha crecido bastante y necesito espacio. Cuando veo que una carpeta .nuget dentro de mi cuenta de usuario tiene 15 GB. Solución : Esa carpeta existe como cache para que VS no busque el paquete cada vez desde la web. Entonces, la solución consiste en los siguientes pasos. Listar cuales son los folders o contenedores de estos paquetes nuget dotnet nuget locals all --list http-cache: <USER>\AppData\Local\NuGet\v3-cache global-packages: <USER>\.nuget\packages\ temp: <USER>\AppData\Local\Temp\NuGetScratch plugins-cache: <USER>\AppData\Local\NuGet\plugins-cache Limpiar las direcciones que tienen estos paquetes nuget con el utilitario de nuget dotnet nuget locals http-cache --clear Clearing NuGet HTTP cache: C:\Users\Vladimir\AppData\Local\NuGet\v3-cache Local resources cleared. y así para cada uno de los locals que se ve en la lista anterior. Luego se debe cambiar las variables de entorno para que esto no nos vuelva a pasar. Como se

Hangfire, si no lo estás usando, estás haciendo algo mal (.NET world)

Hangfire es una librería espectacular que permite encolar tareas en un servidor de tareas que funciona dentro de tu aplicación web. Existen varios tutoriales que muestran de manera bastante sencilla cómo puedes ir integrando esto a tu aplicación. En esta publicación vamos a repetir, pero en español, y sobretodo vamos a tratar de ir lo más al punto posible. Qué es? Es una librería que la cargas a través de NUGET como cualquier otra librería. En realidad tenemos que cargar 3 librerías pero eso lo veremos más adelante. Una vez que hayas cargado todo lo necesario en tu aplicación web tendrás lo siguiente: Un servidor de colas : es decir, un lugar al cual le puedes mandar hacer cosas y no se olvida de esas cosas y las va ejecutando a medida que puede o tiene tiempo. Esto es muy útil para que tu aplicación no pierda tiempo haciendo algo que no necesita realmente hacer en ese instante y devolver más rápido al usuario final. Un tablero de control de colas : una serie de