Hasta ahora hemos hecho aplicaciones que no se comunicaban con otras aplicaciones. Como mucho, desde el Get_Next_Line, se usaban archivos de fuera de la aplicación. Gracias al GNL hemos podido ver cómo relacionarnos, dentro del programa, con un archivo externo a él mismo. Pero en cualquier caso era una sola aplicación con un archivo local, gracias a los file descriptors.
Lo que tratamos ahora es comunicar dos aplicaciones. Hacer que dos programas se comuniquen.
En este sentido puede surgir el término aplicación de red, una aplicación de red son en realidad dos aplicaciones. Cuando se habla de este término lo que tenemos es una aplicación que se intenta comunicar con otra, es decir, algo que manda datos y algo que recibe datos.
Lo normal será que lo que emite datos y lo que los recibe sean ordenadores distintos, pero no tiene por qué. Este proyecto (Minitalk), por ejemplo, aloja ambos programas en el mismo ordenador.
Para que se produzca esta comunicación entre dos máquinas (o dos aplicaciones) se pueden seguir varias arquitecturas o modelos, el más común y el que nos interesa aquí ahora es el modelo cliente - servidor.
No hay más que pensar en internet y en qué sucede cuando nos conectamos a, por ejemplo, YouTube: se trata de dos aplicaciones de naturaleza distinta, una aplicación es cliente (nuestro navegador web Firefox, Chrome, etc.) y otra aplicación es servidor (YouTube).
Nuestro Firefox es un programa que se ejecuta en modo cliente y que se conecta a un servidor (a una página web como YouTube) y esta página responde.
Es decir:
El cliente realiza una request al servidor
El servidor realiza una response o respuesta
Puede y suele haber varios clientes para un mismo servidor. Los servidores están pensados precisamente para responder a múltiples clientes. Este modelo cliente - servidor es un sistema centralizado: un solo servidor para muchos clientes.
Nótese que, para que el cliente realice la request al servidor, el cliente tiene que saber dónde realizar esa petición, es decir, tiene que conocer dónde está el servidor, cuál es su dirección, su número identificativo.
Nótese que, para que el servidor reciba la request, es porque tiene que estar a la escucha de peticiones, tiene que estar “a la escucha” primero, y responder debidamente después.
También existen otros modelos de comunicación como el P2P (donde se puede ser servidor y cliente al mismo tiempo), pero esto no nos interesa ahora.
Aunque el asunto es mucho más complejo, dejémoslo así, como resumen diremos que para este modelo server - client se necesitan dos ejecutables (pueden o no alojarse en el mismo ordenador), uno manda peticiones, el otro está a la espera para recibirlas y después responde a ellas. Se trata de un modo de comunicarse, de transferir datos.