Exemplo n.º 1
0
        /// <summary>
        /// Difunde el mensaje de un usuario a todos los usuarios conectados a la sala.
        /// </summary>
        /// <param name="mensaje">Mensaje del Usuario</param>
        /// <param name="nombre">Nombre del usuario</param>
        /// <param name="flag">Bandera que se utiliza para determinar si se agrega el texto
        /// "dice" al mensaje enviado por el usuario</param>
        ///

        public void iniciarServidor()
        {
            try
            {
                //Inicalizamos nuestro hashtable
                clientes_conectados = new Hashtable();
                //Inicializamos un nuevo servidor en la IP y puerto seleccionado.
                servidor = new TcpListener(IPAddress.Parse(txtIP.Text), int.Parse(txtPuerto.Text));
                //Iniciamos el servidor
                servidor.Start();
                //Indicamos que el servidor esta listo para aceptar peticiones de los clientes
                mensajeChat = "Ha iniciado el Servidor";
                Mensaje();
                //definimos la variable de acepcacion de clientes
                TcpClient cliente;
                //Sólo aceptaremos mensajes de máximo 256 caracteres
                Byte[]        bytesCliente = new Byte[256];
                NetworkStream streamCliente;
                Chat          chat;
                while (true)
                {
                    //Acepta la petición de un cliente
                    cliente = servidor.AcceptTcpClient();
                    //Leemos el mensaje del cliente
                    streamCliente = cliente.GetStream();
                    //bytesCliente sólo acepta mensajes de máximo 160 caracteres
                    streamCliente.Read(bytesCliente, 0, bytesCliente.Length);
                    //Traducimos el stream de bytes a un string en codificación ASCII
                    mensajeCliente = Encoding.ASCII.GetString(bytesCliente, 0, bytesCliente.Length);
                    mensajeCliente = mensajeCliente.Substring(0, mensajeCliente.IndexOf("$"));
                    //Verificamos si ya existe ese nombre de usuario.
                    while (clientes_conectados.ContainsKey(mensajeCliente))
                    {
                        Byte[] bytes = Encoding.ASCII.GetBytes("/*usuario duplicado*/");
                        //transmitimos el mensaje
                        streamCliente.Write(bytes, 0, bytes.Length);
                        streamCliente.Flush();
                        mensajeCliente = mensajeCliente + "1";
                    }
                    //Realmente no hacemos ninguna validación posterior ni se manda un mensaje al
                    //usuario pero por funcionalidad agregaremos esta condición.
                    clientes_conectados.Add(mensajeCliente, cliente);
                    try
                    {
                        switch (mensajeCliente.Substring(0, (mensajeCliente.IndexOf(" "))))
                        {
                        case "Amistad":
                            contadorAmistad++;
                            break;

                        case "Amor":
                            contadorAmor++;
                            break;

                        case "Culinaria":
                            contadorCulinaria++;
                            break;

                        case "Conocimiento":
                            contadorConocimiento++;
                            break;
                        }
                    }catch (Exception ex)
                    {}
                    mensajeChat = string.Format("{0} se ha unido al servidor", mensajeCliente);
                    Mensaje();

                    //Mandamos el mensaje a todos los clientes el mensaje
                    DifundirATodos(mensajeCliente, mensajeCliente, false);

                    //Ciclamos el proceso para que se quede el servidor en espera de nuevas conexiones o mensajes
                    chat = new Chat(cliente, mensajeCliente);
                }
            }
            catch (Exception ex)
            {
            }
            finally
            {
                if (servidor != null)
                {
                    servidor.Stop();
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Difunde el mensaje de un usuario a todos los usuarios conectados a la sala.
        /// </summary>
        /// <param name="mensaje">Mensaje del Usuario</param>
        /// <param name="nombre">Nombre del usuario</param>
        /// <param name="flag">Bandera que se utiliza para determinar si se agrega el texto 
        /// "dice" al mensaje enviado por el usuario</param>
        /// 
        public void iniciarServidor()
        {
            try
            {
               //Inicalizamos nuestro hashtable
                clientes_conectados = new Hashtable();
                //Inicializamos un nuevo servidor en la IP y puerto seleccionado.
                servidor = new TcpListener(IPAddress.Parse(txtIP.Text), int.Parse(txtPuerto.Text));
                //Iniciamos el servidor
                servidor.Start();
                //Indicamos que el servidor esta listo para aceptar peticiones de los clientes
                mensajeChat = "Ha iniciado el Servidor";
                Mensaje();
                //definimos la variable de acepcacion de clientes
                TcpClient cliente;
                //Sólo aceptaremos mensajes de máximo 256 caracteres
                Byte[] bytesCliente = new Byte[256];
                NetworkStream streamCliente;
                Chat chat;
                while (true)
                {
                    //Acepta la petición de un cliente
                    cliente = servidor.AcceptTcpClient();
                    //Leemos el mensaje del cliente
                    streamCliente = cliente.GetStream();
                    //bytesCliente sólo acepta mensajes de máximo 160 caracteres
                    streamCliente.Read(bytesCliente, 0, bytesCliente.Length);
                    //Traducimos el stream de bytes a un string en codificación ASCII
                    mensajeCliente = Encoding.ASCII.GetString(bytesCliente, 0, bytesCliente.Length);
                    mensajeCliente = mensajeCliente.Substring(0, mensajeCliente.IndexOf("$"));
                    //Verificamos si ya existe ese nombre de usuario.
                    while(clientes_conectados.ContainsKey(mensajeCliente))
                    {
                        Byte[] bytes = Encoding.ASCII.GetBytes("/*usuario duplicado*/");
                        //transmitimos el mensaje
                        streamCliente.Write(bytes, 0, bytes.Length);
                        streamCliente.Flush();
                        mensajeCliente = mensajeCliente + "1";

                    }
                    //Realmente no hacemos ninguna validación posterior ni se manda un mensaje al
                    //usuario pero por funcionalidad agregaremos esta condición.
                    clientes_conectados.Add(mensajeCliente, cliente);
                    try
                    {
                        switch (mensajeCliente.Substring(0, (mensajeCliente.IndexOf(" "))))
                        {
                            case "Amistad":
                                contadorAmistad++;
                                break;
                            case "Amor":
                                contadorAmor++;
                                break;
                            case "Culinaria":
                                contadorCulinaria++;
                                break;
                            case "Conocimiento":
                                contadorConocimiento++;
                                break;
                        }
                    }catch(Exception ex)
                    {}
                    mensajeChat = string.Format("{0} se ha unido al servidor", mensajeCliente);
                    Mensaje();

                    //Mandamos el mensaje a todos los clientes el mensaje
                    DifundirATodos(mensajeCliente, mensajeCliente, false);

                    //Ciclamos el proceso para que se quede el servidor en espera de nuevas conexiones o mensajes
                    chat = new Chat(cliente, mensajeCliente);

                }
            }
            catch (Exception ex)
            {

            }
            finally
            {
                if(servidor!=null)
                servidor.Stop();
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Envia elvmensaje de un usuario a los demas usuarios conectados.
        /// </summary>
        /// <param name="mensaje">Mensaje del Usuario</param>
        /// <param name="nombre">Nombre del usuario</param>
        /// <param name="flag">Bandera que se utiliza para determinar si se agrega el texto 
        /// "dice" al mensaje enviado por el usuario</param>
        /// 
        public void metodoIniciarServidor()
        {
            try
            {
                //Se inicia la ventana de actividades del chat
                clientes_conectados = new Hashtable();
                //Se inicia un nuevo servidor en la IP y puerto definidos.
                servidor = new TcpListener(IPAddress.Parse(txtIP.Text), int.Parse(txtPuerto.Text));
                //Se inicia el servidor
                servidor.Start();
                //Se muestra mensaje indicando que el servidor esta listo para aceptar solicitudes de los clientes
                _mensajeChat = "El servidor se ha iniciado";
                Mensaje();
                //Definición de los clientes
                TcpClient cliente;
                //Se cumple con la restricción de que se reciban mensajes de solo 160 caracteres
                Byte[] bytesCliente = new Byte[160];
                NetworkStream streamCliente;
                Chat chat;
                while (true)
                {
                    //Acepta un nuevo cliente
                    cliente = servidor.AcceptTcpClient();
                    //Se lee el mensaje del cliente
                    streamCliente = cliente.GetStream();
                    //bytesCliente sólo acepta mensajes de máximo 160 caracteres
                    streamCliente.Read(bytesCliente, 0, bytesCliente.Length);
                    //Traducimos el mensage a un string en codificación ASCII
                    mensajeCliente = Encoding.ASCII.GetString(bytesCliente, 0, bytesCliente.Length);
                    mensajeCliente = mensajeCliente.Substring(0, mensajeCliente.IndexOf("$"));
                    //Verificamos si ya existe ese nombre de usuario.
                    if (!clientes_conectados.ContainsKey(mensajeCliente))
                    {
                        //Realmente no hacemos ninguna validación posterior ni se manda un mensaje al
                        //usuario pero por funcionalidad agregaremos esta condición.
                        clientes_conectados.Add(mensajeCliente, cliente);
                        _mensajeChat = string.Format("{0} se ha unido al servidor", mensajeCliente);
                        Mensaje();
                    }
                    else
                    {
                      MessageBox.Show("El usuario ya existe, intente de nuevo");
                       //Cliente.Stop();

                   }

                    //Mandamos el mensaje a todos los clientes el mensaje
                    DifundirATodos(mensajeCliente, mensajeCliente, false);

                    //Ciclamos el proceso para que se quede el servidor en espera de nuevas conexiones o mensajes
                    chat = new Chat(cliente, mensajeCliente);
                }
            }
            catch (Exception ex)
            {
                _mensajeChat = ex.ToString();
                Mensaje();
            }
            finally
            {
                if(servidor!=null)
                servidor.Stop();
            }
        }