El chat (término proveniente del inglés que en español equivale a charla), también conocido como cibercharla, designa una comunicación escrita realizada de manera instantánea a través de Internet entre dos o más personas ya sea de manera pública a través de los llamados chats públicos (mediante los cuales cualquier usuario puede tener acceso a la conversación) o privada, en los que se comunican sólo 2 personas a la vez.
¿Cómo funciona un chat?
La respuesta es muy sencilla, al menos si no profundizamos en el tema, y es que, un chat es algo tan sencillo como dohttp://itesm.custhelp.com/app/answers/detail/a_id/394/~/%E2%BFc%E3%B3mo-funciona-el-chat-uv%3F's procesos que intercambian datos entre sí. Comúnmente, estos procesos están situados en diferentes lugares, por ejemplo tenemos un proceso en el cliente, que es o debe ser una mera interfaz que se encargue de enviarle datos al otro proceso (servidor) y dejarle que este haga lo que tenga que hacer con ellos.¿Porqué hablamos de SSL en un chat?
Muchos chats de los que utilizamos hoy en día, envían datos por la red sin cifrar, lo que permite que un usuario malintencionado y que se sitúe entre el cliente y el servidor, sea capaz de, sin mucho problema, recoger los paquetes que pasen por ese puntos y leer su contenido.¿Qué hay que tener en cuenta a la hora de implementar un chat?
Como ya hemos mencionado con anterioridad, vamos a trabajar con un mínimo de dos procesos, un proceso cliente y un proceso servidor, el primero de ellos viene a ser lo que un navegador a una aplicación web, ha de ser capaz de, en la medida de lo posible, dedicarse exclusivamente a mostrar los datos recibidos desde el mismo, mientras que el proceso servidor, es el que, en un principio habría de dedicarse a recibir peticiones, procesarlas y devolver una respuesta con el resultado si es que ha de hacer esto, en nuestro caso, el servidor, al recibir una petición ( un mensaje en este caso ), la analiza, detecta a quién va dirigida y se la envía a los destinatarios, los cuales estarán corriendo otros procesos cliente.¿Qué tipos de comunicación se pueden dar en un chat?
Un usuario con los privilegios suficientes, habría de ser capaz de darle órdenes directas al servidor, de manera que así, el proceso servidor se pueda ejecutar como un demonio, en este caso, la comunicación sería unicast y unidireccional o bidireccional, dependiendo de lo que se desee hacer.Un usuario que desee enviarle un mensaje privado a otro usuario conectado al chat, en este caso el usuario A le enviaría un mensaje al servidor con un identificador del usuario al que quiere enviarle el mensaje, el servidor, una vez haya comprobado que el usuario existe y que puede recibir mensajes privados, debe enviarle el mensaje que ha recibido del cliente A al cliente B.
Un usuario que desee enviarle un mensaje a una serie de usuarios que estén conectados al mismo, como por ejemplo en el caso de que se encuentre en una sala de chat específica.
Un usuario desea hacer un broadcast (enviarle un mensaje a todo el mundo) con un determinado mensaje.
En estos dos últimos casos, el mensaje se le envía al servidor con los flags (indicadores de la actividad que se realiza) necesarios activados para que sepa qué hacer con cada mensaje y se reenvía el mensaje a los destinatarios seleccionados.
¿Como podemos ver el funcionamiento de un chat de este estilo?
Tanto Microsoft, Google como otras empresas y usaurios han desarrollado unas estupendas herramientas para mantenernos conectados en tiempo real, pero dado que o bien no tenemos acceso al código funete de determinadas aplicaciones ( cliente/servidor ), o que no utilizan un protocolo abierto, o que son muy complicados para empezar a trabajar sobre ellos, para aprender de una manera superficial como funcionan, vamos a crear nuestro propio chat, a continuación os pongo una copia del archivo README para que veáis las funcionalidades del mismo y si os compensa seguir leyendo esta serie de artículos:El objetivo consite en el desarrollo de un chat mediante el uso de socketsEl ejemplo de chat que vamos a crear está desarrollado en C bajo un entorno Unix, más concretamente Linux, y para dotarle de una interfaz gráfica, nos hemos aprovechado de las bondades del sistema de pipes unix para implementarla rápidamente en java.
de internet TCP, por lo que en este caso seremos capaces de comunicarnos mediante
una conexión fiable entre el cliente y el servidor, siendo en este caso el cliente
un cliente múltiple que deberá recibir la información correspondiente a los mensajes
que han enviado el resto de clientes.
MANUAL DE USO
CLIENTE
El cliente es un programa que tras ejecutarlo, nos permite escribir
mensajes y al cliente, los cuales, dependiendo de la sintaxis utilizada
se comportarán en el mismo de una u otra manera, por ejemplo, si escibimos
un mensaje cualquiera, se enviará el mensaje como un mensaje de texto
normal, es decir que deseamos que se envíe al resto de usuarios del chat,
por contra si se escribe uno de los comandos en ejecución se ejecutará
la acción correspondiente y descrita en las siguientes lineas.
Al mismo tiempo, mientras el proceso nos permite enviarle mensajes al
servidor, éste está leyendo constantemente los datos que le llegan desde
el servidor.
Para ejecutar el cliente basta con ejecutar en consola:
./cli5
Si por el contrario deseamos ejecutar el cliente con una interfaz
gráfica, basta con ejecutar, para ejecutarlo hace falta la máquina
virtual java.
./interfaz
Cuando un usuario se conecte, se le mostrarán los nombres de las diferentes
salas a las que puede acceder con cadenas de la siguiente manera
– %s –
Siendo %s, el nombre de la sala, una vez que sepamos a que sala deseamos
conectarnos, tendremos que escribir el nombre de la sala tal cual aparece,
es decir el equivalente a %s
FLAGS
-p indica el puerto por el que nos conectaremos con el servidor
./cli5 -p 12345
-d indica la dirección por la que nos conectaremos con el servidor
./cli5 -d localhost
-cert indica la ruta del certificado a utilizar para conectarse con
el servidor
./cli5 -cert /usr/share/doc/libssl-dev/demos/sign/cert.pem
COMANDOS EN EJECUCIÓN
-x comando aplicable en cualquier momento, es el único comando aplicable
en el proceso de autenticación.
-x # cierra el cliente
–serv lo que se esciba en el siguiente comando, se le envia directamente
al servidor
–serv # nos indica que ahora estamos hablando con el servidor
-x # le enviamos el comando -x al servidor
Para salir del modo de conversación con el servidor (modo durante
el cual no se recibirán los mensajes enviados por el chat) habremos
de escribir ‘exit’, y volveremos al modo de chat tradicional.
SERVIDOR
El servidor es un programa que es capaz de interactuar n clientes, de
manera que estos se conectan a él y este retransmite la información.
Su uso es muy sencillo, ya que una vez ejecutado, podemos olvidarnos de
él, de hecho en el caso de que deseemos ejecutar un comando en ejecución,
hemos de, cargar un cliente y mediante el previo uso del comando
–serv, enviarle uno de los comandos permitidos durante la ejecución
y cuyo comportamiento se detalla a continuación.
En el caso de que al ejecutar el servidor, no se encuentre el fichero con
la base de datos, se creará uno y se solicitarán las credenciales del
administrador en el servidor, tras esto, todo se hará desde el cliente.
Al conectarse con el servidor, y escoger un nombre, si este no está en la
base de datos, el usuario se conectará como invitado, pudiendo sólo
enviar mensajes, si por el contrario el usuario está registrado, se le
solicitará la contraseña y tendrá el rol asignado en la base de datos
Si al ejecutar el cliente nos dice que la base de datos no existe, el
proceso terminará con un error (-1), por lo que deberemos crear dicha
base de datos ejecutando ‘./createdb nombre de la base de datos’.
ROLES
GUEST – invitado, sólo puede enviar mensajes y a su nombre se le
concaternará la cadena de texto ‘-guest’
USER – usuario, sólo puede enviar mensajes
ADMIN – administrador, además de enviar mensajes, es capaz de enviarle
comandos al servidor
FLAGS
-p indica el puerto por la que habrán de conectarse los clientes
./serv5 -p 12345
-ls indica el tamaño inicial de la lista de clientes
./serv5 -ls 100
-lg indica el factor de crecimiento de la cola
./serv5 -lg 10
-db indica el nombre de la base de datos con la que se va a interactuar
./serv5 -db chat.db
-cert indica la ruta del certificado a utilizar para conectarse con
el servidor
./serv5 -cert cert
-pkey indica la ruta de la clave privada de la que hará uso el servidor
./serv5 -pkey pkey
COMANDOS EN EJECUCIÓN estos comandos vienen desde el cliente, sólo será
capaz de comunicarse con el servidor aquellos usuarios que tengan el
rango de administrador.
-x cierra el servidor
–add-user name password [rol]
Este comando, creará un usuario con nombre ‘name’, contraseña
‘password’ y el rol indicado, por ahora se admiten los roles de
‘admin’ y ‘user’, en caso de no especificar el campo rol, el
usuario creado le srá asignado el rol ‘user’. No se podrán
crear dos usuarios con el mismo nombre.
–delete-user name
Este comando borra el usuario cuyo nombre coincida con el valor
‘name’
–list-user
Este comando lista todos los usuarios registrados en el chat
–log
Este comando imprime todas las ocurrencias del log si no se le
pasan parámetros
Se le pueden pasar dos parámetros, fecha de inicio y fecha de fin
–log dd/mm/YYYY dd/mm/YYYY
en cuyo caso se listarán sólo los log entre dos fechas
–mp [nombre]
Este comando le envía un mensaje privado al usuario llamado nombre,
el mensaje se escribirá después de haber pulsado intro después
de esta cadena.
–mp admin
mensaje para el administrador
Le envia un mensaje privado al administrador cuyo contenido es
‘mensaje para el administrador’
–add-room [nombre]
Este comando añade una nueva sala de chat llamada [nombre]
–list-room
Este comando lista todas las salas de chat
–delete-room [nombre]
Este comando borra una sala de chat llamada [nombre] y mueve los
usuarios que se encontraban en esta a la sala general
CREATEDB
Proceso que crea la base de datos con un usuario administrador.
Sólo admite un parámetro que es obligatorio y que tiene el nombre de
la base de datos a crear, es aconsejable llamar a la base de datos
chat.db ya que es el nombre por defecto de la base de datos a la que
intenta conectarse el servidor
./createDB chat.db
