Está en la página 1de 13

UNIVERSIDAD CATOLICA DE LA SANTÍSIMA CONCEPCIÓN

FACULTAD DE INGENIERÍA

INGENIERÍA CIVIL INFORMÁTICA

IN1082C - REDES DE COMPUTADORES

Tarea 2: desarrollo de aplicaciones cliente-servidor


usando sockets. Consultor de datos de permisos de
circulación.

Profesor: Yasmany Prieto.

Integrantes de grupo: Diego Romero - Jeremy Aguirre.

Concepción, 28 de junio del 2023


Introducción

En el mundo actual, donde la comunicación y el intercambio de


información son fundamentales, el uso de tecnologías de red se ha
vuelto omnipresente. Una de las tecnologías más utilizadas para la
comunicación entre sistemas distribuidos es la programación de
sockets.

Descripción del proyecto

El proyecto consiste en la implementación de un sistema cliente-servidor


utilizando sockets, donde el cliente envía consultas sobre vehículos y el
servidor procesa esas consultas utilizando una base de datos de pago
de permisos de circulación. El servidor devuelve parámetros
relacionados con los vehículos consultados, permitiendo a los usuarios
obtener información precisa y actualizada. El enfoque se centra en la
eficiencia y escalabilidad de la comunicación, así como en la
manipulación de la base de datos para facilitar la toma de decisiones
informadas en relación con los vehículos y sus permisos de circulación.

Utilidad y motivación para desarrollarla

La utilidad y motivación para desarrollar este sistema cliente-servidor


basado en sockets y consultas sobre vehículos con información de pago
de permisos de circulación radican en varios aspectos:

Acceso rápido a la información: El sistema permite a los usuarios


obtener de manera eficiente y oportuna parámetros relacionados con los
vehículos consultados. Esto facilita la toma de decisiones informadas,
ya sea para verificar el cumplimiento de los requisitos legales o para
evaluar la validez de los permisos de circulación.

Automatización y agilidad en la consulta de información: Al utilizar un


sistema cliente-servidor, se agiliza el proceso de consulta y obtención de
datos. Los usuarios pueden realizar consultas desde cualquier lugar y
en cualquier momento, sin la necesidad de realizar trámites
presenciales o esperar respuestas lentas.

En conjunto, la utilidad y motivación para desarrollar este sistema


radican en proporcionar un mecanismo ágil y confiable para acceder a
información sobre vehículos y sus permisos de circulación, promoviendo
el cumplimiento normativo y la seguridad vial.

Herramientas utilizadas

A continuación, se enumeran las herramientas y bibliotecas utilizadas en


este código:

stdio.h: Biblioteca estándar de entrada/salida en C, que proporciona


funciones para entrada y salida de datos.

stdlib.h: Biblioteca estándar de C que contiene funciones para la gestión


de memoria, conversión de tipos y otras utilidades.

string.h: Biblioteca estándar de C que proporciona funciones para


manipulación de cadenas de caracteres.

unistd.h: Biblioteca estándar de C que proporciona acceso a llamadas al


sistema, como close() y exit().

signal.h: Biblioteca estándar de C que se utiliza para manejar señales


del sistema, como la interrupción (SIGINT).

sys/types.h: Biblioteca que contiene definiciones de tipos de datos


utilizados en llamadas al sistema.

sys/socket.h: Biblioteca que contiene definiciones de estructuras y


funciones relacionadas con la programación de sockets.

netinet/in.h: Biblioteca que contiene definiciones de estructuras para el


manejo de direcciones de red y operaciones relacionadas.

arpa/inet.h: Biblioteca que contiene funciones para convertir entre


representaciones de direcciones IP.

El código implementa un servidor que escucha en un puerto específico y


acepta conexiones de clientes. Utiliza funciones como socket(), bind(),
listen() y accept() para establecer la comunicación. Además, utiliza
funciones como recv() y send() para recibir y enviar datos entre el
cliente y el servidor. También se utiliza la función sprintf() para formatear
y almacenar mensajes de salida.

En resumen, el código utiliza bibliotecas estándar de C y bibliotecas


relacionadas con sockets para implementar un servidor que puede
aceptar múltiples conexiones de clientes, recibir consultas y enviar
respuestas.

Compilación del servidor y cliente

Para compilar el servidor de Consultor de datos de permisos de


circulación, se utiliza el siguiente comando:

Entorno Servidor:

gcc Servidor.c -o Servidor

Entorno Cliente

gcc Cliente.c -o Cliente

Ejecución de Cliente.c y Servidor.c

Servidor:

./Servidor 12345

Cliente:

./Cliente 127.0.0.1 12345

Ejemplo de Parámetros de envío para prueba Cliente-Servidor:

Cliente envía patente: LH-8292

Cliente envia dato a solicitar: Tasacion

Explicación del código


El código proporcionado es un ejemplo de un servidor implementado en
lenguaje C utilizando sockets. Un servidor es un programa que espera
recibir conexiones de clientes y responde a las solicitudes que reciben.

En este caso, el servidor espera conexiones en un puerto específico.


Utiliza una serie de bibliotecas estándar en C para manejar la
comunicación entre el servidor y los clientes.

El servidor se inicia creando un socket, que es como un punto final de


comunicación en una red. Luego, se configura el servidor para escuchar
en el puerto especificado. Cuando un cliente intenta conectarse, el
servidor acepta la conexión y establece una conexión individual con ese
cliente.

Una vez establecida la conexión, el servidor recibe mensajes del cliente,


los procesa y envía respuestas al cliente. En el código, hay un bucle que
permite al servidor recibir y responder continuamente a los mensajes del
cliente. El servidor utiliza funciones como recv() para recibir mensajes y
send() para enviar respuestas.

El código también maneja señales del sistema, como la interrupción


(SIGINT), que permite cerrar el servidor de manera adecuada cuando se
recibe una señal de interrupción.

En resumen, el código implementa un servidor que escucha en un


puerto específico y responde a las solicitudes de los clientes. Utiliza
funciones y bibliotecas para recibir y enviar mensajes, y maneja señales
para cerrar correctamente el servidor cuando sea necesario.

Parte del código implementada:

El código proporcionado es una función en lenguaje C que se encarga


de obtener el valor de una columna específica en un archivo CSV, dada
una placa y el nombre de la columna. La función toma tres parámetros:
el nombre del archivo CSV, la placa a buscar y el nombre de la columna
deseada.

El código comienza abriendo el archivo CSV y, si no se puede abrir,


muestra un mensaje de error y retorna NULL. Luego, lee la primera
línea del archivo que contiene los encabezados de las columnas y la
omite.

A continuación, se busca el índice de la columna solicitada en los


encabezados. Esto se logra mediante la comparación del nombre de la
columna con cada encabezado. Si se encuentra la columna, se guarda
su índice sumándole 1 para saltar la columna "nombreColumna". Si no
se encuentra la columna, se muestra un mensaje de error y se retorna
NULL.

Después, se recorren las filas del archivo CSV y se compara la placa


buscada con la placa en cada fila. Si se encuentra una coincidencia, se
marca como encontrada y se detiene el bucle.

Una vez encontrada la fila correspondiente, se recorre la fila separando


los valores utilizando el delimitador ";" y se compara el contador con el
índice de la columna deseada. Cuando se encuentra la columna, se
guarda su valor en una variable dinámica y se retorna.

Si no se encuentra la placa buscada, se muestra un mensaje de error y


se retorna NULL.

En general, esta función permite obtener el valor de una columna


específica en un archivo CSV, dada una placa y el nombre de la
columna.
A continuación se muestra parte del codigo implementado:
Selección del protocolo de comunicación

El protocolo TCP/IP es ampliamente utilizado en la comunicación de


redes y proporciona un enfoque confiable y orientado a la conexión para
la transferencia de datos. Al seleccionar TCP/IP, se garantiza que los
datos enviados desde el cliente al servidor y viceversa lleguen de
manera ordenada y sin errores, y que se realice un control de flujo para
evitar la congestión de la red.

El protocolo TCP/IP es ideal para aplicaciones donde la integridad y la


fiabilidad de los datos son cruciales, como en el caso de enviar y recibir
consultas sobre información de vehículos y pagos de permisos de
circulación.

Cabe destacar que existen otros protocolos de transporte, como UDP


(User Datagram Protocol), que ofrecen una comunicación más liviana y
rápida pero menos confiable que TCP. La elección del protocolo
depende de los requisitos específicos de la aplicación y las necesidades
de los usuarios. En el caso del código proporcionado, el uso de TCP/IP
es apropiado para garantizar la integridad de los datos transmitidos y la
confiabilidad en la comunicación entre el cliente y el servidor.

Capturas de pantalla y análisis de paquetes en Wireshark

Para ilustrar el funcionamiento del sistema, se adjuntan capturas de


pantalla que muestran la operación tanto del servidor como del cliente.
Estas capturas proporcionan una visión detallada de la interacción entre
el servidor y el cliente durante el proceso de consulta y respuesta.

Además, se incluyen capturas de pantalla de los paquetes capturados


en Wireshark, una herramienta de análisis de tráfico de red. Estos
paquetes corresponden a una solicitud de conexión (Connect) y a la
comunicación de envío y respuesta de mensajes (send, receive) entre el
cliente y el servidor. Estas capturas en Wireshark permite examinar los
detalles de la comunicación a nivel de paquetes, como las direcciones
IP, los puertos utilizados y los datos transmitidos.
Las capturas de pantalla proporcionan una evidencia visual del correcto
funcionamiento del sistema, mostrando la interacción entre el cliente y el
servidor, así como los paquetes de datos transmitidos durante el
proceso de consulta y respuesta.

Estas capturas de pantalla son una forma efectiva de documentar y


comunicar el flujo de trabajo y la operatividad del sistema, brindando
una visión clara de cómo se lleva a cabo la comunicación entre el cliente
y el servidor y cómo se intercambian los datos.

Captura Servidor
Captura Cliente

Captura Wireshark
Alcance de la aplicación y posibles mejoras

Alcance de la aplicación:

El alcance de la aplicación se centra en proporcionar un sistema


cliente-servidor utilizando sockets para la consulta de información sobre
vehículos y sus pagos de permisos de circulación. El servidor actúa
como el componente central que procesa las consultas de los clientes y
envía respuestas con los parámetros relevantes de los vehículos
consultados. Los clientes, por su parte, se conectan al servidor y envían
consultas para obtener información actualizada.

El alcance incluye las siguientes funcionalidades:

Establecimiento de conexiones: El servidor permite a múltiples clientes


conectarse simultáneamente y gestionar sus solicitudes de manera
individual.

Procesamiento de consultas: El servidor procesa las consultas enviadas


por los clientes utilizando una base de datos que contiene información
sobre los pagos de permisos de circulación de los vehículos.

Envío de respuestas: Una vez procesadas las consultas, el servidor


envía respuestas a los clientes con los parámetros relevantes de los
vehículos consultados, como el estado del pago de los permisos de
circulación.

Posibles mejoras:

Seguridad: Se puede mejorar la seguridad del sistema implementando


mecanismos de autenticación y cifrado de datos para garantizar que
solo usuarios autorizados puedan acceder a la información.

Interfaz de usuario: Se puede desarrollar una interfaz gráfica intuitiva


para los clientes, lo que facilitaría la realización de consultas y la
visualización de los resultados.

Ampliación de la base de datos: Para mejorar la precisión y la


exhaustividad de la información sobre los pagos de permisos de
circulación, se puede considerar la integración de fuentes de datos
adicionales o la actualización periódica de la base de datos existente.
Funcionalidades adicionales: Se pueden agregar funcionalidades como
la generación de informes o notificaciones automáticas para recordar a
los usuarios sobre los próximos vencimientos de los permisos de
circulación.

Escalabilidad: Si se espera un aumento significativo en el número de


consultas y clientes, se puede optimizar el sistema para manejar un
mayor volumen de solicitudes de manera eficiente y garantizar un
rendimiento óptimo.

Estas posibles mejoras permitirían fortalecer la seguridad, mejorar la


usabilidad y ampliar las capacidades de la aplicación, brindando una
experiencia más completa y robusta tanto para los clientes como para el
servidor.

Comentarios finales

Se implementó una solución basada en la comunicación directa entre el


cliente y el servidor a través de sockets. El servidor procesa las
consultas enviadas por los clientes utilizando una base de datos interna
que contiene información sobre los pagos de permisos de circulación de
los vehículos. El servidor envía respuestas con los parámetros
relevantes de los vehículos consultados.

Aunque el manejo de archivos JSON y la utilización de una API podrían


ser métodos alternativos para obtener la información, se decidió
implementar una solución más simple y directa utilizando las
capacidades de comunicación de sockets en C. Esto evitó la
complejidad adicional de trabajar con librerías adicionales y facilitó el
desarrollo y la comprensión del código.

En proyectos futuros, se podrían explorar otras opciones para


administrar la información, como el uso de una API o librerías
específicas para el manejo de archivos JSON. Sin embargo, en este
caso en particular, se optó por una implementación más básica y
focalizada en el funcionamiento de los sockets y la comunicación entre
cliente y servidor.

También podría gustarte