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

Saber si un Socket esta vivo C#

Estas en el tema de Saber si un Socket esta vivo C# en el foro de .NET en Foros del Web. Hola buenas tardes foreros !!! Bueno, la cuestión es la siguiente, tengo una aplicación que recibe conexiones de diferentes equipos, cada vez que hay una ...

  #1 (permalink)  
Antiguo 28/12/2007, 05:13
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Saber si un Socket esta vivo C#

Hola buenas tardes foreros !!!

Bueno, la cuestión es la siguiente, tengo una aplicación que recibe conexiones de diferentes equipos, cada vez que hay una nueva conexion, agrego el objeto Socket a una lista.

Hasta aqui OK.

Bien, hora lo que quiero es testear constantemente que esos sockets siguen conectados, ya que no hay ningún Evento en el objeto socket para comprobar esto mismo.

Mi intención es hacer algo similar a:
Código:
foreach(Socket socketTemporal in listaSockets)
{
     if(!socketTemporal.Connected)
            listaSockets.Remove(socketTemporal);
}
Esto sería perfecto, el problema es que si el socket se cierra por lado del cliente, esta propiedad(Socket.Connected) sigue dando como TRUE.

En fin, si alguien puede hecharme un cable, se lo agradecería.

Saludos.
__________________
Charlie.
  #2 (permalink)  
Antiguo 04/01/2008, 05:36
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Re: Saber si un Socket esta vivo C#

Bueno, ya esta todo resuelto.

He terminado mi clase la cual acepta múltiples sockets, controla si estan conectados o si se han cerrado (Tanto de forma inesperada como de forma voluntaria). Acepta envio de mensajes de forma selectiva y demás.

Si alguien quiere meterse en el mundo de sockets y le interesa el proyecto que me lo diga, que no tengo ningún problema en compartir mi proyecto.

Se basa de dos proyectos Visual Studio. Uno es mi proyecto de Servidor y otro es una pequeña aplicacion windows que muestra el uso de dicha libreria.

Un saludo.
__________________
Charlie.
  #3 (permalink)  
Antiguo 06/02/2008, 10:06
Avatar de jose_d  
Fecha de Ingreso: enero-2003
Ubicación: Cali
Mensajes: 220
Antigüedad: 21 años, 3 meses
Puntos: 4
Re: Saber si un Socket esta vivo C#

Hola, yo estoy entrando en este cuento y me interesa mucho el poder hacer lo que hiciste, ya que quiero poder controlar remotamente un cliente enviarle mensajes etc. para esto me imagino que necesito multiples conexiones para poder controlar varios equipos bueno total te agradeceria mucho si me podes contactar y hablamos.
__________________
El leer te da el poder de mejorar
  #4 (permalink)  
Antiguo 06/02/2008, 14:35
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Re: Saber si un Socket esta vivo C#

Amigo, por supuesto cualquier cosa en la que te pueda ayudar, encantado lo haré. No soy ningún experto, pero gracias al desarrollo que estoy haciendo he aprendido bastante sobre sockets.

Si solo vas a trabajar de Cliente a Cliente, puedes usar las clases TcpListener y TcpClient. Si lo que quieres es montar un servidor potente... entonces tendrás que trabajar directamente con la clase Socket y con funciones asíncronas.

Exponme tus dudas o si quieres que te pase el código de lo que hice, dime tu eMail y te lo mando sin ningún reparo.

Pd: En las FAQS (Mira en la última - penúltima página) dejé documentación sobre sockets también amigo.

Un saludo.
__________________
Charlie.
  #5 (permalink)  
Antiguo 08/02/2008, 22:15
Avatar de jose_d  
Fecha de Ingreso: enero-2003
Ubicación: Cali
Mensajes: 220
Antigüedad: 21 años, 3 meses
Puntos: 4
Re: Saber si un Socket esta vivo C#

Hola gracias por el dato, mira lo que quiero hacer es algo que siempre me ha causado curiosidad no se si conoscas el programa www.Logmein.com que es para acceso remoto y control de un equipo X mediante el protocolo TCP segun lo que he podido observar del proceso. y pues la verdad quiero hacer algo parecido, lo que mas me llama la atencion es que el programa se conecta desde internet sin necesidad de nada mas.

Pero bueno sigo con el proyecto voy a ver como lo logro hacer por el momento pienso que con remouting y con TCP se puede hacer.
__________________
El leer te da el poder de mejorar
  #6 (permalink)  
Antiguo 12/02/2008, 14:18
 
Fecha de Ingreso: febrero-2008
Mensajes: 1
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Saber si un Socket esta vivo C#

Hola amigo chma estuve buscando precisamente informacion sobre remouting o sockets en C# y encontre tu post donde describes el programa que hiciste y es parecido a lo que deseo implementar.
Lo que voy a implementar es un chat en una LAN y necesito saber de sockets y conecciones remotas a un servidor mas aun me gustaria darle un vistazo a tu codigo y ver como funciona te estaria realmente agradecido si pudieras enviarmelo al correo ' [email protected] '.

Tambien me gustaria hacerte algunas preguntas sobre el tema una vez lo haya estudiado.
Muchas gracias de antemano chao amigo.
  #7 (permalink)  
Antiguo 12/02/2008, 16:35
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Re: Saber si un Socket esta vivo C#

Claro que no me importa pasarte el código amigo. Ya te lo he mandado. Está hecho en 3.5 y usa un poco de LinQ.

Sobre el cliente que te mando, me falta implementarlo todavía ya que quiero hacerlo con XAML y estoy estudiandolo todavía. Ahora lo tengo parado por que estoy con unos exámenes.

Te explico un poco el funcionamiento del serivdor:

1-. El cliente se conecta al servidor, y este almacena el socket creado en una Lista.
2-. El cliente envia un mensaje XML al servidor para poder relacionar dicho Socket agregado anteriormente en la lista a una direccion de eMail.
3-. Cuando el cliente envia un mensaje, este se envia en formato XML al servidor, con un TAG en el que se especifica el destinatario (donde va el eMail), el servidor recorre la lista de sockets buscando el que se corresponda con el eMail y envia el mensaje.
__________________
Charlie.
  #8 (permalink)  
Antiguo 16/02/2008, 06:36
 
Fecha de Ingreso: febrero-2008
Mensajes: 1
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Saber si un Socket esta vivo C#

Hola chcma, estoy en el mismo caso que el amigo anterior fenryrSulven, por favor enviame esa clase que has desarrollado que se ve muy interesante! mi correo es [email protected] muchas gracias de antemano!
  #9 (permalink)  
Antiguo 18/02/2008, 03:10
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Re: Saber si un Socket esta vivo C#

Hola chonex, perdona por no haberte contestado antes, miré el POST en su día y vi tu mensaje pero se me pasó (Gracias por recordarmelo).

Ahora mismo te lo envio.

Un saludo.
__________________
Charlie.
  #10 (permalink)  
Antiguo 25/03/2008, 09:05
 
Fecha de Ingreso: marzo-2008
Mensajes: 2
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Saber si un Socket esta vivo C#

Hola chcma...

me puedes decir como solucionaste el problema de las desconexiones de los sockets?
  #11 (permalink)  
Antiguo 25/03/2008, 09:31
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Re: Saber si un Socket esta vivo C#

Si, por supuesto (Asumo que conoces la programación asíncrona):



Código:
//Inicio mi Socket para aceptar conexiones.
objSocketServidor.BeginAccept(new AsyncCallback(ConexionRealizada), null);



//Metodo que captura la llamada Asincrona anterior y generera la ESCUCHA ASINCRONA
        private void ConexionRealizada(IAsyncResult iAr)
        {
            try
            {
                Socket objSocket = objSocketServidor.EndAccept(iAr);
                ClsSocket objCliente = new ClsSocket(objSocket);
                listaSockets.Add(objCliente);

                objSocketServidor.BeginAccept(new AsyncCallback(ConexionRealizada), null);
                objSocket.BeginReceive(bytesDatos, 0, bytesDatos.Length, SocketFlags.None, new AsyncCallback(DatosLlegados), objSocket);

                if (NuevaConexion != null)
                {
                    string ipClienteConectado = ((IPEndPoint)objSocket.RemoteEndPoint).Address.ToString();
                    int puertoClienteConectado = ((IPEndPoint)objSocket.RemoteEndPoint).Port;
                    NuevaConexion(ipClienteConectado, puertoClienteConectado);
                }
            }
            catch (Exception ex)
            {
                if (DatosErrores != null)
                    this.DatosErrores(MethodBase.GetCurrentMethod().Name, ex.Message);
            }
        }





        private void DatosLlegados(IAsyncResult iAr)
        {
            Socket objSocket = (Socket)iAr.AsyncState;
            try
            {
                int tamanioDatosRecibidos = objSocket.EndReceive(iAr);
                if (tamanioDatosRecibidos > 0)
                {
                    byte[] bytesDatosReales = new byte[tamanioDatosRecibidos];
                    Array.Copy(bytesDatos, bytesDatosReales, tamanioDatosRecibidos);
                    string txtDatosReales = Encoding.ASCII.GetString(bytesDatosReales);

                    if (DatosRecibidos != null)
                    {
                        string ipClienteConectado = ((IPEndPoint)objSocket.RemoteEndPoint).Address.ToString();
                        int puertoClienteConectado = ((IPEndPoint)objSocket.RemoteEndPoint).Port;
                        this.DatosRecibidos(objSocket, ipClienteConectado, puertoClienteConectado, txtDatosReales);
                    }

                    objSocket.BeginReceive(bytesDatos, 0, bytesDatos.Length, SocketFlags.None, new AsyncCallback(DatosLlegados), objSocket);
                }
                else
                {
                    EliminarCliente(objSocket);
                }
            }
            catch (SocketException exSocket)
            {
                if (exSocket.SocketErrorCode == SocketError.ConnectionReset)
                    EliminarCliente(objSocket);
                else
                {
                    if (DatosErrores != null)
                        this.DatosErrores(MethodBase.GetCurrentMethod().Name, exSocket.Message);
                }
            }
            catch (Exception ex)
            {
                if (DatosErrores != null)
                    this.DatosErrores(MethodBase.GetCurrentMethod().Name, ex.Message);
            }
        }

Siempre que se envia un dato al socket, se entra por este metodo. Cuando se pierde la conexión, también se entra por este metodo, solo que el tamanio de bytes es 0, entonces es cuando sabes que se ha perdido la conexión, fijate en la condicional
Código:
if (tamanioDatosRecibidos > 0)
{
    //Sigue conectado
}else{
    //Se ha perdido la conexion.
}
__________________
Charlie.
  #12 (permalink)  
Antiguo 25/03/2008, 15:56
 
Fecha de Ingreso: marzo-2008
Mensajes: 2
Antigüedad: 16 años, 1 mes
Puntos: 0
De acuerdo Re: Saber si un Socket esta vivo C#

Gracias... por la respuesta.
  #13 (permalink)  
Antiguo 18/07/2008, 11:18
Avatar de fulfaro  
Fecha de Ingreso: enero-2005
Ubicación: Venezuela
Mensajes: 58
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Saber si un Socket esta vivo C#

Saludos chcma,

Estoy interesado en tus ejemplos, por que he estado trabajando con Sockets, y tengo un problema cuando hago llamadas desde varios clientes a un mismo servidor, llega un punto que colapsan los socket. He estado investigando lo de los sockets asincronos, el detalle esta que el cliente tambien debe manejar las llamadas asincronas, cosa que me limita cuando tengo un aplicativo cliente en otra plataforma que no sea .Net.

Muchas Gracias de antemano por tu respuesta.
__________________
Juan Carlos Romero
§§ JCRF §§

"Si el hombre fuese constante sería perfecto" SHAKESPARE
  #14 (permalink)  
Antiguo 13/08/2008, 10:56
 
Fecha de Ingreso: agosto-2008
Mensajes: 1
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Saber si un Socket esta vivo C#

Hola chcma, he leido tu post y estoy interesada en tu codigo sobre sockets en C#, ya que estoy haciendo un proyecto que se basa en que varios clientes simultaneamente, deben poder conectarse a un servidor y he encontrado poca informacion. Si no es mucha molestia me ayudarías mucho si me lo enviases a: [email protected].

Gracias por adelantado!!

Última edición por moffly; 13/08/2008 a las 11:04
  #15 (permalink)  
Antiguo 25/08/2008, 09:49
 
Fecha de Ingreso: agosto-2008
Mensajes: 1
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Saber si un Socket esta vivo C#

Hola chcma
He leido tu post y tengo los problemas de la programacion de mi socket, porque tengo problemas porque no puedo saber cuando mi servidor se desconecta , mi cliente marca errores inesperados, queria pedirte si podias ayudarme o darme algunos tips de que funciones o comandos puedo incluir para darme cuenta cuando mi servidor se ha caido.
Gracias .
  #16 (permalink)  
Antiguo 25/08/2008, 13:31
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Respuesta: Saber si un Socket esta vivo C#

Hola a todos !!!

Perdonar mi demora, pero estuve de vacaciones y bueno... Aqui no tengo el código para mandaros el ejemplo, vais a tener que esperar unos días (10 de Septiembre) a que vuelva a mi lugar de residencia para enviaros el codigo. Si alguien de a quienes se lo he enviado os lo puede mandar os lo agradecería.

Voy a poner aqui el código del servidor y del cliente en cuanto lo tenga para que os sirva. No obstante lo de detectar cuando se ha caido el servidor o el cliente, lo teneis en este link de las faqs: http://www.forosdelweb.com/f29/faq-s...48/index5.html

Las líneas en concreto son:
Código:
        private void DatosLlegados(IAsyncResult iAr)
        {            
            Socket objSocket = (Socket)iAr.AsyncState;
            try
            {
                int tamanioDatosRecibidos = objSocket.EndReceive(iAr);
                if (tamanioDatosRecibidos > 0)
                {
                      //TRATAMOS LOS DATOS RECIBIDOS
                }else{
                      //SE HA CAIDO EL CLIENTE
                }
Cuando un socket se desconecta se envía un valor 0, lo leí en un post de C++ hace tiempo y bueno... con esto me va todo perfectamente, aun que recomiendan por ahí hacer "pings" al servidor, de esta forma como la tengo yo, desconectas el equipo y se detecta que el cliente se ha desconectado... asi que .... creo que uno se puede ahorrar el implementar un keep alive. Que alguien me corriga si discrepa.

Un saludo gente. (Espero haber sido de ayuda, al menos temporalmente)
__________________
Charlie.
  #17 (permalink)  
Antiguo 26/08/2008, 04:45
 
Fecha de Ingreso: agosto-2008
Mensajes: 1
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Saber si un Socket esta vivo C#

Muy buenas!!

Yo también estoy interesado en el código, quiero intentar controlar un reproductor de vídeo con el servidor telnet que incorpora :)

mi correo es: bugmenot.ya (a) gmail.com

Muchas gracias!
  #18 (permalink)  
Antiguo 26/08/2008, 13:24
Avatar de jhonwilliams  
Fecha de Ingreso: marzo-2004
Ubicación: Copacabana - Colombia
Mensajes: 1.484
Antigüedad: 20 años, 1 mes
Puntos: 76
Respuesta: Saber si un Socket esta vivo C#

Hola, tengo que hacer una aplicación cliente-servidor con sockets, si alguien me hace el favor de enviarme el ejemplo estare enorme mente agradecido. mi correo [email protected]

Gracias
__________________
Si mi respuesta te ha ayudado, agradezco que me regales unos puntos de Karma XD.

"Una mujer sería encantadora si uno pudiera caer en sus brazos sin caer en sus manos." (Ambrose Bierce)
  #19 (permalink)  
Antiguo 17/09/2008, 20:19
Avatar de Farookh_Bulsara  
Fecha de Ingreso: mayo-2004
Mensajes: 1.185
Antigüedad: 19 años, 11 meses
Puntos: 2
Respuesta: Saber si un Socket esta vivo C#

chcma yo tb estoy con un proyecto, usando sockets,quisiera saber si es q puedes pasarme tu proyecto para q pueda aprender mas sobre sockets,mi mail es:
[email protected]
y tambien seria bueno si es q tienes manuales o tutoriales sobre sockets
tanks
__________________
"Todas las cosas deben mostrarse primero con mascaras tetricas y terrorificas para que puedan inscribirse a si mismas en el corazon de la humanidad"
  #20 (permalink)  
Antiguo 01/10/2008, 09:59
 
Fecha de Ingreso: septiembre-2005
Mensajes: 2
Antigüedad: 18 años, 7 meses
Puntos: 0
Respuesta: Re: Saber si un Socket esta vivo C#

Cita:
Iniciado por chcma Ver Mensaje
Bueno, ya esta todo resuelto.

He terminado mi clase la cual acepta múltiples sockets, controla si estan conectados o si se han cerrado (Tanto de forma inesperada como de forma voluntaria). Acepta envio de mensajes de forma selectiva y demás.

Si alguien quiere meterse en el mundo de sockets y le interesa el proyecto que me lo diga, que no tengo ningún problema en compartir mi proyecto.

Se basa de dos proyectos Visual Studio. Uno es mi proyecto de Servidor y otro es una pequeña aplicacion windows que muestra el uso de dicha libreria.

Un saludo.

Hola CHCMA
Queria saber si tu solucion soluciona el siguiente problema y si lo podrias compartir, el problema es el siguiente tengo un conexion tcp entre 2 puntos, resulta que una vez, se me corto el cable fisico que los conectaba, esto es posilbe de saber en cualqueir punto cuando esto sucede?



Muchas Gracias, Shoen
  #21 (permalink)  
Antiguo 01/10/2008, 15:16
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Respuesta: Saber si un Socket esta vivo C#

Mi último post lo explica. Un saludo.
__________________
Charlie.
  #22 (permalink)  
Antiguo 01/07/2009, 15:27
 
Fecha de Ingreso: julio-2009
Mensajes: 3
Antigüedad: 14 años, 9 meses
Puntos: 0
Saber si un Socket esta vivo C#

hola chcma!

soy nuevo en el foro

quisiera saber como enviar mensajes de forma selectiva usando sockets asincronos, es decir que al seleccionar un cliente conectado le envie solo a el, el mensaje.

gracias
  #23 (permalink)  
Antiguo 02/07/2009, 03:09
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Respuesta: Saber si un Socket esta vivo C#

Bueno... yo lo hago de la siguiente manera.

1-. Tengo mi servidor.

2-. Los clientes se conectan al servidor, y mandan un mensaje para registrarse, por ejemplo en XML (Si no mandan este mensaje, el socket estará conectado, pero LA APLICACIÓN no sabrá como identificar un socket de otro.

2.1-. Al mandar el mensaje, asocio, por ejemplo, en una hashtable, el nombre del usuario, junto con su socket. Asi, cuando queira mandar algo, mando el nombre del usuario y el msanje a un método, este método recorrerá el hashtable, hasta encontrar el nombre de usuairo y entonces usará ese socket para mandar el mensaje.

¿Me expliqué?


Te muestro un pequeño ejemplo de mi código, en este caso, en vez de usar un hashtable, use una List<T> con una clase mia.

Código:
        //El txtEmail, es lo que uso para recoger el socket específico de entre todos los que están conectados a mi servidor.
        public void EnviarDatosCliente(string txtEmail, string txtMensaje)
        {
            ClsSocket objCliente = (from cliente in listaSockets where cliente.DireccionEmail == txtEmail select cliente).First<ClsSocket>();

            byte[] bytesMensaje = Encoding.UTF8.GetBytes(txtMensaje);
            EnviarDatos(objCliente.ObjSocket, bytesMensaje);
        }
        private void EnviarDatos(Socket objSocket, byte[] bytesMensaje)
        {
            objSocket.BeginSend(bytesMensaje, 0, bytesMensaje.Length, SocketFlags.None, new AsyncCallback(DatosEnviadosAr), new Object[] { objSocket, bytesMensaje });
        }
__________________
Charlie.
  #24 (permalink)  
Antiguo 02/07/2009, 12:07
 
Fecha de Ingreso: julio-2009
Mensajes: 3
Antigüedad: 14 años, 9 meses
Puntos: 0
De acuerdo sockets

muchas gracias chcma!
tengo una duda. Como almacenas el usuario y su socket correspondiente en tu List<T>?, porque yo tengo algo parecido, solo que manejo una estructura con la informacion del cliente.
Aqui te muestro mi codigo del server:

namespace Server
{
enum Command
{
Login,
Logout,
Message,
List,
Null
}

public partial class SGSserverForm : Form
{
struct ClientInfo
{
public Socket socket;
public string strName;
public string strHostname;
}

ArrayList clientList;
public string strHostName = Dns.GetHostName();

Socket serverSocket;

byte[] byteData = new byte[1024];

public SGSserverForm()
{
clientList = new ArrayList();
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

try

{
serverSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);

IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 1000);

serverSocket.Bind(ipEndPoint);
serverSocket.Listen(10);

serverSocket.BeginAccept(new AsyncCallback(OnAccept), null);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "server",MessageBoxButtons.OK, MessageBoxIcon.Error);
}

}

private void OnAccept(IAsyncResult ar)
{
try
{
Socket clientSocket = serverSocket.EndAccept(ar);

serverSocket.BeginAccept(new AsyncCallback(OnAccept), null);

clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None,
new AsyncCallback(OnReceive), clientSocket);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "server",MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

private void OnReceive(IAsyncResult ar)
{
try
{
Socket clientSocket = (Socket)ar.AsyncState;
clientSocket.EndReceive(ar);

Data msgReceived = new Data(byteData);

Data msgToSend = new Data();

byte [] message;

msgToSend.cmdCommand = msgReceived.cmdCommand;
msgToSend.strName = msgReceived.strName;


switch (msgReceived.cmdCommand)
{

case Command.Login:

ClientInfo clientInfo = new ClientInfo();
clientInfo.socket = clientSocket;
clientInfo.strHostname = msgReceived.strMessage;
clientInfo.strName = msgReceived.strName;

clientList.Add(clientInfo);

msgToSend.strMessage = msgReceived.strName + " conectado";
msgToSend.strMessage = "<<" + strHostName + " conectado>>";

break;

case Command.Logout:

int nIndex = 0;
foreach (ClientInfo client in clientList)
{
if (client.socket == clientSocket)
{
clientList.RemoveAt(nIndex);
break;
}
++nIndex;
}

clientSocket.Close();

msgToSend.strMessage = msgReceived.strName + " desconectado";
msgToSend.strMessage = "<<" + strHostName + " desconectado>>";
break;

case Command.Message:

msgToSend.strMessage = msgReceived.strName + ": " + msgReceived.strMessage;
break;

case Command.List:

msgToSend.cmdCommand = Command.List;
msgToSend.strName = null;
msgToSend.strMessage = null;

foreach (ClientInfo client in clientList)
{
msgToSend.strMessage += client.strName + "*";
}

message = msgToSend.ToByte();
clientSocket.BeginSend(message, 0, message.Length, SocketFlags.None,
new AsyncCallback(OnSend), clientSocket);
break;
}

if (msgToSend.cmdCommand != Command.List)
{
message = msgToSend.ToByte();

foreach (ClientInfo clientInfo in clientList)
{
if (clientInfo.socket != clientSocket ||
msgToSend.cmdCommand != Command.Login)
{
clientInfo.socket.BeginSend(message, 0, message.Length, SocketFlags.None,
new AsyncCallback(OnSend), clientInfo.socket);
}
}

TextLogAddText(DateTime.Now.ToString("yyyy/MM/dd") + " " + DateTime.Now.ToString("hh:mm:ss")+ " " + msgToSend.strMessage + "\r\n");

}

if (msgReceived.cmdCommand != Command.Logout)
{
clientSocket.BeginReceive(byteData, 0, byteData.Length, SocketFlags.None, new AsyncCallback(OnReceive), clientSocket);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "server", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

private void TextLogAddText(string Text)
{
if (txtLog.InvokeRequired)
{
txtLog.Invoke(new MethodInvoker(delegate { TextLogAddText(Text); }));
return;
}
txtLog.Text += Text;
}

public void OnSend(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
client.EndSend(ar);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "server", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

gracias.
  #25 (permalink)  
Antiguo 02/07/2009, 23:33
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Respuesta: Saber si un Socket esta vivo C#

Pues tu List<T> debería ser con los datos de la estructura.

De todas formas... ya lo tienes puesto en tu código, solo que con un ArrayList, sería cambiarlo por una Lista Genérica y listo. Asi podrías usar linQ por si quieres hacer consultas sobre los clientes conectados o lo que sea.
Código:
ClientInfo clientInfo = new ClientInfo();
clientInfo.socket = clientSocket;
clientInfo.strHostname = msgReceived.strMessage;
clientInfo.strName = msgReceived.strName;

clientList.Add(clientInfo);
__________________
Charlie.
  #26 (permalink)  
Antiguo 10/07/2009, 12:44
 
Fecha de Ingreso: julio-2009
Mensajes: 3
Antigüedad: 14 años, 9 meses
Puntos: 0
Socket C#

hola chcma!

muchas gracias por tu respuesta, me fue de gran ayuda. hice algunas modificaciones al servidor, pero la idea de buscar en el arraylist el nombre del socket me fue de mucha utilidad, gracias a eso funciono.

otra vez gracias.
  #27 (permalink)  
Antiguo 11/07/2009, 06:42
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 10 meses
Puntos: 7
Respuesta: Saber si un Socket esta vivo C#

Me alegro.
__________________
Charlie.
  #28 (permalink)  
Antiguo 08/11/2009, 09:47
 
Fecha de Ingreso: noviembre-2009
Mensajes: 1
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Saber si un Socket esta vivo C#

Cita:
Iniciado por chcma Ver Mensaje
Me alegro.
Estimado CHCMA estare muy agradecido me envies tu ejemplo. [email protected]
  #29 (permalink)  
Antiguo 22/12/2009, 10:31
 
Fecha de Ingreso: diciembre-2009
Mensajes: 1
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Saber si un Socket esta vivo C#

Hola CHMA, Podrias por favor ayudarme compartiendo tu proyecto? Anexo mi correo [email protected] Gracias y felices fiestas!!
  #30 (permalink)  
Antiguo 21/01/2010, 11:23
 
Fecha de Ingreso: noviembre-2007
Mensajes: 2
Antigüedad: 16 años, 5 meses
Puntos: 0
De acuerdo Respuesta: Saber si un Socket esta vivo C#

Hola amigo como estas, yo tambien estoy intentando hacer una aplicacion cliente / servidor que envie mensaje entre ellos y se conecten multiples clientes, podrias ayudarme por favor mi correo es [email protected] Gracias
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.
Tema Cerrado

SíEste tema le ha gustado a 5 personas




La zona horaria es GMT -6. Ahora son las 15:19.