/// <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(); } } }
/// <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(); } }
/// <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(); } }