Implementacion De Un Chat
EDWIN MENA
EL SERVIDOR
Para desarrollar el servidor necesitamos agregar las siguientes referencias:
using System;
using System.Collections;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;
Variables
#region [ Variables ]
/// <summary>
/// La claseTcpListener proporciona métodos sencillos para escuchar y
/// aceptar solicitudes de conexión entrantes en modo de bloqueo sincrónico.
/// </summary>
private TcpListener servidor;
/// <summary>
/// Almacenará el nombre de los clientes conectados
/// </summary>
private static Hashtable clientes_conectados;/// <summary>
/// Mensaje recibido del cliente o que se enviará al cliente
/// </summary>
private String mensajeCliente;
/// <summary>
/// Mensaje que se envía a la pantalla del Servidor.
/// </summary>
private String _mensajeChat;
#endregion
Eventos:
#region [ Eventos ]
///<summary>
/// Inicia el servidor de chat
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnIniciar_Click(object sender, EventArgs e)
{
try
{
btnIniciar.Enabled = false;
btnDetener.Enabled = true;//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 estalisto para aceptar peticiones de los clientes
_mensajeChat = "Servidor Iniciado...";
Mensaje();
while (true)
{
//Acepta la petición de un cliente
TcpClient cliente = servidor.AcceptTcpClient();
//Sólo aceptaremos mensajes de máximo 256 caracteresByte[] bytesCliente = new Byte[256];
//Leemos el mensaje del cliente
NetworkStream streamCliente = cliente.GetStream();
streamCliente.Read(bytesCliente, 0, bytesCliente.Length);
//Traducimos el stream de byytes 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 nise 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();
}
//Mandamos el mensaje a todos losclientes el mensaje
DifundirATodos(mensajeCliente, mensajeCliente, false);
//Ciclamos el proceso para que se quede el servidor en espera de nuevas conexiones o mensajes
Chat chat = new Chat(cliente, mensajeCliente);
}
}
catch (Exception ex)
{
_mensajeChat =...
Regístrate para leer el documento completo.