sábado, 22 de octubre de 2011

Cliente-Servidor

Hola de nuevo bloggers, lo que vengo a postear ahora es un proyecto cliente-servidor que el profesor Ray de Programación Avanzada nos puso de examen.
Vamos comenzando.

Enunciado:

Software Inc. Requiere una aplicación Cliente-Servidor con las siguientes caracteristicas:
debe existir un Servidor
debe existir un Cliente
debe existir un Comunicador

El comunicador debe tener la función de comunicar al cliente con el servidor, es decir si el cliente quiere enviar una peticion al servidor debe comunicarselo al comunicador y el comunicador al servidor y el servidor para responderle al cliente debe hacer el mismo proceso.

Mi solución:
Explico un poco...
Inicio dividiendo el proyecto en 3 aplicaciones  con CLIENT.exe,  escribiendo en el stream (StreamWriter) una cadena "Hi Server" la cual la mandamos por el puerto 9898 y COMMUNICATOR.exe lee (StreamReader) esta cadena para posteriormente escribirla ahora en el puerto 9890, y asi es como nos comunicamos y el server lee el mensaje que el cliente le envió.
Es importante destacar que el puerto 9898 aun no se ha cerrado y debe de permanecer abierto hasta que le llegue su respuesta.
Llegando la cadena al servidor es el turno del servidor de enviar una cadena "Hi Client" y ocurre exactamente lo mismo, cuando llega este mensaje al cliente, los 2 sockets son cerrados el del puerto 9898 y el del 9890.
y si ponemos en un loop podemos enviar y recibir cadenas como un tipo de chat entre el servidor y el cliente.

Código del CLIENT.exe:
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.IO;
using System.Net;

namespace caClient
{
    class Program
    {
        string theString;
        bool flag = false;
        static void Main()
        {
            new Program().Connect();
        }
        private string GetIP()
        {
            IPHostEntry endpoint = Dns.GetHostEntry("patricia-PC");
            return endpoint.AddressList[0].ToString();
        }
        public void Connect()
        {
            TcpClient socketForServer;
            string server = GetIP();
            int puerto = 9898;
            do{
            try
            {
                /*Creamos un TcpClient y le pasamos
                 * y le pasamos el server y el puerto
                 */
                socketForServer = new TcpClient(server, puerto);
                //Console.WriteLine("Conexion establecida, esperando respuesta...");
            }
            catch
            {
                Console.WriteLine("Could not connect to {0}:{1}", server, puerto.ToString());
                return;
            }
            NetworkStream networkStream = socketForServer.GetStream();
            StreamReader streamReader = new StreamReader(networkStream);
            StreamWriter streamWriter = new StreamWriter(networkStream);
            try
            {
                if (flag == false)
                {
                    Console.WriteLine("------------------------------------");
                    Console.WriteLine(" >>>Bienvenido al Chat de MORTEM<<<");
                    Console.WriteLine("------------------------------------");
                    flag = true;
                }
                Console.WriteLine("Client dice:");
                theString = Console.ReadLine();
                streamWriter.WriteLine(theString);
                streamWriter.Flush();
                string outputString = streamReader.ReadLine();
                Console.WriteLine("Mortem dice:");
                Console.WriteLine(outputString);
            }
            catch
            {
                Console.WriteLine("Exception reading from server");
            }
            finally
            {
                networkStream.Close();
            }
            } while (theString != "exit");
        }
    }
}
Y aca esta el otro diagrama del primer ejercicio:

No hay comentarios:

Publicar un comentario