Foros del Web » Programación para mayores de 30 ;) » .NET »

chat en C#

Estas en el tema de chat en C# en el foro de .NET en Foros del Web. Hello: Terminé de construir un chat en mi aplicación, tengo dos problemillas, el chat es solo uno a muchos,,Administrador--Muchos usuarios, 1. En la ventan principal ...
  #1 (permalink)  
Antiguo 08/11/2004, 07:41
 
Fecha de Ingreso: junio-2004
Mensajes: 84
Antigüedad: 19 años, 10 meses
Puntos: 0
chat en C#

Hello:
Terminé de construir un chat en mi aplicación, tengo dos problemillas, el chat es solo uno a muchos,,Administrador--Muchos usuarios,

1. En la ventan principal del administrador hay un list box donde me dice que usuarios estan conectados, para hablar con él necesito darle doble click en el item del nombre del usuario que este en el listbox y me abre una ventana aparte (estilo Messenger). NEcesito llevarle el nombre de ese usuario o el nick a esa ventana en la parte del titulo (tittle bar) y no se como..

2. necesito que en el list box, si un usuario me esta hablando a mi (administrador) que haga blink o ilumine el nombre del usuario sobre el lixt box,sin necesidad de abrir la ventana del usuario... es dificill???

Muchas gracias, les agradecería cualquier información.
  #2 (permalink)  
Antiguo 25/06/2008, 12:22
(Desactivado)
 
Fecha de Ingreso: enero-2008
Mensajes: 15
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: chat en C#

namespace Broadcast_utilizando_UDP
{
public partial class frmMain : Form
{
#region "Variables"
//Variable de objeto que contiene el socket
Socket ElSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

//Variable que contiene al hilo encargado de recibir los datos
Thread HiloRecibir;

//Variable que indica si el programa se está cerrando
bool Saliendo = false;

//Variables temporales para almacenar los datos recibidos
string DireccIP; string ContenidoMensaje;
#endregion

public frmMain()
{
InitializeComponent();
}

private void txtMensaje_TextChanged(object sender, EventArgs e)
{
//Cuando txtMensaje esté vacío, deshabilitar el botón de envío.
cmdEnviar.Enabled = (txtMensaje.TextLength > 0);
}

private void cmdEnviar_Click(object sender, EventArgs e)
{
//Contiene la dirección de Broadcast y el puerto utilizado
IPEndPoint DirecciónDestino = new IPEndPoint(IPAddress.Broadcast, 20145);
//Buffer que guardará los datos hasta que se envíen
byte[] DatosBytes = Encoding.Default.GetBytes(txtMensaje.Text);

//Envía los datos
ElSocket.SendTo(DatosBytes, DatosBytes.Length, SocketFlags.None, DirecciónDestino);

txtMensaje.Clear(); //Limpia txtMensaje
txtMensaje.Focus(); //Mueve el foco hacia txtMensaje
}

private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
Saliendo = true; //Indica que se está saliendo del programa
ElSocket.Close(); //Cierra el socket
HiloRecibir.Abort(); //Termina el proceso del hilo
}

private void frmMain_Load(object sender, EventArgs e)
{
//Separamos el puerto 200145 para usarlo en nuestra aplicación
ElSocket.Bind(new IPEndPoint(IPAddress.Any, 20145));
//Habilitamos la opción Broadcast para el socket
ElSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
HiloRecibir = new Thread(RecibirDatos); //Crea el hilo
HiloRecibir.Start(); //Inicia el hilo
}

private void RecibirDatos()
{
//Mientras el inidicador de salida no sea verdadero
while(!Saliendo){
//Variable para obtener la IP de la máquína remitente
IPEndPoint LaIPRemota = new IPEndPoint(IPAddress.Any, 0);
//Variable para almacenar la IP temporalmente
EndPoint IPRecibida = (EndPoint)LaIPRemota;
byte[] RecibirBytes = new byte[256]; //Buffer
string Datos = ""; //Texto a mostrar

try{
//Recibe los datos
ElSocket.ReceiveFrom(RecibirBytes, RecibirBytes.Length, SocketFlags.None, ref IPRecibida);
//Los convierte y lo guarda en la variable Datos
Datos = Encoding.Default.GetString(RecibirBytes);
}catch (SocketException ex){
if(ex.ErrorCode == 10040){ //Datos muy largos
Datos += "[truncado]"; //Añade la cadena "[truncado]" al texto recibido
}else{
//Muestra el mensaje de error
MessageBox.Show("Error '" + ex.ErrorCode + "' " + ex.Message,"Error al recibir los datos", MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}

//Convierte el tipo EndPoint a IPEndPoint con sus respectivas variables
LaIPRemota = (IPEndPoint)IPRecibida;
//Guarda los datos en variables temporales
DireccIP = LaIPRemota.Address.ToString();
ContenidoMensaje = Datos.ToString();

//Invoca al evento que mostrará los datos en txtDatosRecibidos
txtDatosRecibidos.Invoke(new EventHandler(ActualizarTextoMensaje));
}
}

private void txtDatosRecibidos_TextChanged(object sender, EventArgs e)
{
//Mostrar siempre la última línea del TextBox.
txtDatosRecibidos.SelectionStart = txtDatosRecibidos.TextLength;
txtDatosRecibidos.ScrollToCaret();
}

protected void ActualizarTextoMensaje(object sender, EventArgs e)
{
//Si txtDatosRecibidos está vacío:
if(txtDatosRecibidos.TextLength == 0){
txtDatosRecibidos.Text = DireccIP + ">" + ContenidoMensaje;
}else{
//de lo contrario insertar primero un salto de línea y luego los datos.
txtDatosRecibidos.Text += "\r\n" + DireccIP + ">" + ContenidoMensaje;
}
}

}
}
  #3 (permalink)  
Antiguo 25/06/2008, 12:25
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: chat en C#

Muy bien por el aporte, pero en 4 años o casi 4 yo creo q ya encontro solucion o el proyecto no es mas de su interes.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #4 (permalink)  
Antiguo 29/08/2012, 19:31
Avatar de baker1562  
Fecha de Ingreso: marzo-2011
Ubicación: Puntarenas
Mensajes: 261
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: chat en C#

Para procesar que un servidor tenga muchos clientes, se debe emplear "por ley" hilos, o solo con los sockets basta??
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:45.