En este repositorio se encuentra la solución de primer miniproyecto de Sistemas Operativos y Servicios de Red, dictada por el profesor John Sanabria, el cual desarrolla un shell remoto que sigue el esquema cliente/servidor.
Realizado por:
- Maria Camila Montaño Polania.
- Andres Camilo Vargas Román.
La siguiente gráfica muestra lo que se espera sea la interacción entre el shell cliente y el servidor.
Al lado derecho de la gráfica se observa el servidor quien está esperando por peticiones de un cliente. Este servidor espera recibir comandos a través de la red de parte de un proceso cliente.
El cliente es un proceso que está en espera de leer por teclado un comando y una vez recibido ese comando, se envía al servidor.
El cliente creará un hijo quien se encarga de interactuar con el servidor, enviar el comando y esperar por la respuesta del comando.
Una vez este proceso hijo reciba la respuesta del servidor, imprime la respuesta y termina su ejecución.
El cliente (padre) volverá a presentar el prompt (>
) y quedará en espera del siguiente comando por parte del usuario.
El servidor al recibir una solicitud a través de la red, crea un proceso hijo quien se encargará de procesar dicha solicitud.
El proceso hijo recibe la solicitud y la ejecuta con la función execvp
o alguna de las funciones miembros de la familia exev*
.
El proceso (padre) toma la salida del proceso hijo y la envía al lado del cliente.
A continuación, se da una descripción de la ejecución del proyecto:
En el proyecto se emplea Vagrant y VBoxManage para crear una máquina virtual Ubunut Xenial que usa un núcleo de la CPU y 1024 MB de memoria.
Para iniciar la máquina virtual, digite en la terminal:
vagrant up
Una vez se inicie la máquina virtual, se accede a ella a través de SSH mediante el comando:
vagrant ssh
Con el propósito de usar el modelo cliente/servidor, se recomienda en otro terminal, ejecutar el mismo comando, de modo que se acceda desde dos espacios de usuarios.
Una vez se encuentre en la máquina virtual, se puede acceder a la carpeta del proyecto en ambas sesiones, mediante el comando:
cd /vagrant
En esta carpeta, se han creado los archivos principales del proyecto conocidos como basic_client.c
y basic_server.c
los cuales ejecutan el cliente y el servidor. Para usar estos archivos, primero se deben compilar y crear la aplicación, lo cual se hace empleando el comando
make basic_client_server
Este comando se encargará de crear todos los archivos *.o necesarios y hará en enlace que permitirá tener los ejecutables del proyecto.
Para ejecutar el servidor ejecute el comando:
./basic_server 12358
En la otra terminal ejecute el cliente de la siguiente manera:
./basic_client localhost 12358
El cliente envía la cadena hola mundo
y esta es recibida por el servidor quien lo imprime en su pantalla.
Los siguientes comandos se pueden ejecutar en la Máquina Virtual con el fin de probar su funcionamiento:
ls
cat <nombre_archivo>
touch <nombre_archivo>
rm <nombre_archivo>