La idea principal es generar una herramienta que mediante el uso de distintas funcionalidades de .net Framework como ser sockets, thread y I/O genere un chat donde todos los usuarios pueden ademas de "hablar" intercambiar archivos.
Para generarlo lo que vamos a hacer es ir generando las distintas funcionalidades por separado hasta llegar a la etapa de integración que nos va a dar como resultado la aplicación funcionando.
Para esta primer entrega el requerimiento va a ser el siguiente: Generar dos aplicaciones, una llamada Servidor y otra llamada Cliente que se conecten mediante el uso de sockets TCP/IP. El servidor tiene que estar preparado para aceptar múltiples conexiones (muchos clientes a la vez) y el procesamiento de la información que llega de cada cliente tiene que ser manejada mediante un thread independiente. El cliente al conectarse debe enviar un mensaje solicitando la conexión el cual el servidor contestara con un mensaje standar de bienvenida.
Veamos un poco la estructura de nuestra aplicación, en términos gráficos vamos a tener un proceso (aplicación servidor) que va a generar un socket de escucha en un puerto determinado (esto lo vamos a explicar mas adelante) y varias procesos clientes se van a conectar a ese socket, quedado algo así como lo que pueden ver en la imagen a continuación
Como crear un socket de escucha en C#
Vamos a ver a continuación que la creación de socket de escucha en C# es mucho mas practica (y simple) que para los que como yo están acostumbrados a hacer en C puede ser algo tosca.
Para esto, simplemente vamos a necesitar una instancia de la clase TcpListener.
var port = 10300;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
var serverSocket = new TcpListener(localAddr, port);
Para esto, como pueden ver en el código anterior solo necesitamos crear un objeto de esta clase con dos parámetros fundamentales: La ip y el puerto, requisitos básicos para hacer la conexión.Con esto ya estamos listos para iniciar nuestro servidor y eso lo hacemos simplemente llamando a un método del objeto serverSocket, el Start que lo que va a realizar es crear un socket de escucha en el puerto indicado.
Como iniciar un nuevo thread
Ahora de acuerdo a nuestro primer requerimiento lo que necesitamos hacer es que nuestra aplicación se divida en n aplicaciones capaces de atender los pedidos que llegan de los clientes. Como ya dije varias veces el .net framework nos hace la vida mucho mas facil, y hacer esto que a simple vista parece muy complicado se reduce unicamente en crear un metodo estatico el cual va a ser invocado cada vez que nuestra aplicacion quiera "dividirse". Como vamos a hacer? solo debemos tener una instancia de la clase Thread
TcpClient client = serverSocket.AcceptTcpClient(); Thread t = new Thread(ThreadProc); t.Start(client);
Y nuestro metodo ThreadProc va a estar definido asi
public static void ThreadProc(object info)
{
...Su codigo aqui
}
Con esto, cada vez que nuestra aplicación ejecute el método Start(); se creara un nuevo thread que va a atender los pedidos del cliente.Si están interesados en ver el código completo del servidor y del cliente ambos están en el siguiente repositorio de GitHub https://github.com/skielo/DistributedChat.git . Desde ya están invitados a hacer un fork del repositorio para agregar su propia funcionalidad.

No hay comentarios:
Publicar un comentario