CHAT PROGRAMADO EN VISUAL C
Este proyecto fue desarrollado en Visual C con el fin de investigar en el campo de los SOCKETS.
Especificación
El programa consta de dos partes: Servidor y Cliente.
SERVIDOR:
Posee
5 clases: CServidorDlg, CEscuchaSocket, CClienteSocket, CAyuda y CAcerca.
1. CServidorDlg:
Esta clase es la clase dialogo de la ventana principal, es la encargada de
controlar la habilitacin del servidor, actualizar los clientes, leer los
mensajes y enviarlos a los dems clientes por medio de los sockets.
2. CEscuchaSocket:
Esta clase implementa el socket del servidor encargado de escuchar las
conexiones y mensajes entrantes. Cuando un cliente se conecta, este socket lo
asocia a otro socket exclusivo para este cliente, y se queda esperando mas
conexiones o mensajes. Cuando recibe un mensaje, lo enva a los otros clientes.
3. CClienteSocket:
Esta clase implementa los sockets del servidor encargados de establecer una
conexin separada para cada nuevo cliente que se conecta. Se implementa con una
lista de punteros, y cada vez que un nuevo cliente se conecta al servidor, se
agrega un nodo nuevo a la lista con la direccin del socket asignado.
4. CAyuda: Esta clase es la que despliega la ayuda disponible para la aplicacin del servidor.
5. CAcerca:
Esta clase es la que despliega la informacin de la aplicacin del servidor.
CLIENTE:
Posee
4 clases: CClienteDlg, CEnviaSocket, CAyuda, CAcerca.
1. CClienteDlg:
Esta clase es la clase dialogo de la ventana principal, es la encargada de
controlar la conexin de cada cliente con el servidor, actualizar los clientes
y leer los mensajes recibidos.
2. CEnviaSocket:
Esta clase implementa el socket del cliente encargado de conectarse con el
servidor, para poder recibir los mensajes que este le manda. Cuando se conecta
al servidor, este lo asocia a la lista de punteros que tiene, y lo deja
disponible para enviarle mensajes.
3. CAyuda:
Esta clase es la que despliega la ayuda disponible para la aplicacin del
cliente.
4. CAcerca:
Esta clase es la que despliega la informacin de la aplicacin del cliente.
Funciones
Principales:
Clase
CServidorDlg:
void
AceptarCliente();
Esta
funcin llama a la funcin Accept() del socket del servidor que est
escuchando y esperando nuevas conexiones o mensajes, para aceptar una nueva
conexin. Cuando se acepta el cliente, se agrega un socket para el cliente a la
lista de sockets conectados.
void
RecibirMensaje(CClienteSocket * elSocket);
Esta
funcin llama a la funcin Receive() del socket del servidor que esta
escuchando, para recibir un nuevo mensaje, el cual trae un cdigo de mensaje.
Esta funcin identifica el tipo de mensaje y llama a la funcin adecuada.
void
LeerMensaje(CString elMensaje);
Esta
funcin agrega los mensajes al ListBox de los mensajes.
void
EnviarMensaje(CString elMensaje);
Esta
funcin enva un mensaje a todos los clientes que aparecen en la lista de
punteros a los sockets de los clientes conectados.
void
BorrarCliente(CString elMensaje);
Esta
funcin se activa cuando un cliente sale del sistema. Elimina al cliente de la
cadena de caracteres y del ListBox de clientes conectados.
void EnviarClientes();
Esta
funcin enva la cadena de caracteres de clientes actualizada a todos los
clientes conectados.
void
RevisarVacios();
Esta
funcin controla que los campos obligatorios no se dejen vacos.
void
ActualizarClientes();
Esta
funcin agrega un cliente nuevo a la cadena de caracteres y al ListBox de
clientes conectados. Cuando termina de actualizar la cadena de caracteres, llama
a la funcin
Clase
CEscuchaSocket:
virtual
void OnAccept(int nErrorCode);
Esta
funcin se activa cuando el socket del servidor que est escuchando, recibe
una nueva solicitud de conexin. Cuando se activa, llama a la funcin
AceptarCliente de la clase CServidorDlg.
Clase
CClienteSocket:
virtual
void OnReceive(int nErrorCode);
Esta
funcin se activa cuando el socket del servidor de un cliente determinado que
est conectado recibe un mensaje. Cuando se activa, llama a la funcin
RecibirMensaje de la clase CServidorDlg.
Clase
CClienteDlg:
void
RevisaVacios();
Esta
funcin controla que los campos obligatorios no se dejen vacos.
void RecibirMensaje();
Esta
funcin llama a la funcin Receive() del socket del cliente que esta conectado
al servidor, para recibir un nuevo mensaje, el cual trae un cdigo de mensaje.
Esta funcin identifica el tipo de mensaje y llama a la funcin adecuada.
void
LeerMensaje(CString elMensaje);
Esta
funcin agrega los mensajes al ListBox de los mensajes.
void
BorrarCliente(CString elMensaje);
Esta
funcin se activa cuando un cliente sale del sistema. Elimina al cliente de la
cadena de caracteres y del ListBox de clientes conectados.
void
ActualizarClientes();
Esta
funcin agrega un cliente nuevo a la cadena de caracteres y al ListBox de
clientes conectados.
Clase
CEnviaSocket
virtual
void OnReceive(int nErrorCode);
Esta
funcin se activa cuando el socket del cliente conectado al servidor recibe un
mensaje. Cuando se activa, llama a la funcin RecibirMensaje de la clase
CClienteDlg.