Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-10-2005
R_Richards R_Richards is offline
Miembro
 
Registrado: feb 2005
Posts: 13
Poder: 0
R_Richards Va por buen camino
Question Cuál es la Mejor forma de Eliminar Conexiones Clientes de un Server Indy

Buenas Tardes...

Estoy teniendo un grave problema con las componentes Indy.

Quiero en un momento determinado, eliminar las conexiones Cliente existentes dentro de una componente IdTCPServer a través de la propiedad IdTCPServer.Active := false y efectivamente, las elimina, pero cuando los clientes intentan conectarse de nuevo arroja el famoso error TCP connection error :10061.

Cuál es la mejor manera de eliminar los hilos clientes conectados a mi Server ?

Espero su respuesta..

Rafael Richards - Maracaibo, Venezuela.
Responder Con Cita
  #2  
Antiguo 05-10-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

No conozco los componentes que mencionas, pero se me ocurre algo que remotamente o no tal vez pudiera ser positivo, en el sentido de que pueda servirte. Entiendo que si hay una serie de "hilos" (luego iremos con esto) que se conectan a un "server" y en deteminado momento haces algo así:

Código Delphi [-]
 IdTCPServer.Active := false;
Es posible que lo que consigas no sea "liberar" (eliminar) los "hilos" conectados, sino que, sencillamente, los dejas "huérfanos", esto es, acaso la desactivación del "server" implica la "rescisión" del contrato contraído con los "hilos".

Ahora bien. ¿Qué son los "hilos"? ¿Son objetos de la clase "TThread"? ¿Son otro tipo de objeto? Si esto es así, entonces sería cuestión de averiguar cómo "liberar" (si a esto te refieres con eliminar) los "hilos" siguiendo el procedimiento correspondiente: sea mediante algún método "Free", "Release", u otros que al cabo consiguieran lo que se persige.

Y hasta aquí puedo escribir. Quiero decir, al menos, hasta que me digas que no, que ando errado, que no van por ahí los "hilos" y que si no sé de esos componentes a qué me meto a hablar de ellos...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 06-10-2005
R_Richards R_Richards is offline
Miembro
 
Registrado: feb 2005
Posts: 13
Poder: 0
R_Richards Va por buen camino
Lightbulb Estas en lo Correcto, son Threads (Hilos)

Correcto, tienes razón debi ser más explicito...
Lo que quiero es Liberar los "Threads" que están conectados al IdTCPServer de Indy, que representan conexiones desde otros equipos Clientes.

Tendré que validar como tu dices, cómo liberar o destruir los Hilos (Threads), para que al cabo de un rato los clientes vuelvan a conectarse....

Gracias por el consejo, voy a probar una solución alternativa a ver que tal funciona...
Responder Con Cita
  #4  
Antiguo 06-10-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Si los clientes están activos, lo mas educado me parece que sería enviarles un mensaje indicandoles que deben desconectarse. ¿no?

Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 22-07-2010
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Poder: 16
fide_uci Va por buen camino
Lightbulb Desconectar clientes de la Indy

Bueno, pues puedes acceder a la lista de Hilos del TCPServer y desconectarlos a todos manualmente. Ten en cuenta que estoy utilizando Indy 10 y que aqui ya no existe los PeerTrhead sino que son los AContext, que son lo mismo pero con algunas modificaciones. Asi que quisas tengas que adaptar este codigo si usas Indy 9. Te recomiendo que actualices a la version 10 que esta mucho mas comoda y facil de utilizar y que ademas tiene muchos nuevos componentes como los SSL que son muy utiles.

Código Delphi [-]
private
   procedure DesconectarClientes();
...
implementation

procedure TForm1.DesconectarClientes ();
var
  vList: TList;
  vCount: Integer;
  vDatos: PClient;
begin

  try
    vList := TCPServer.Contexts.LockList;
    
    for vCount := 0 to vList.Count -1 do
      begin
        (* Prueba a ver cual de estos metodos te sirve para desconectar *)
        TIdContext(vList.Items[vCount]).Connection.Socket.Close;
        TIdContext(vList.Items[vCount]).Connection.Disconnect;
        TIdContext(vList.Items[vCount]).Connection.Disconnect(True);
        TIdContext(vList.Items[vCount]).Connection.DisconnectNotifyPeer;
      end;  
  finally
    TCPServer.Contexts.UnlockList;
  end;
end;
Espero que te sea de ayuda esta codigo y cualquier cosa puedes preguntar que aqui estamos para ayudarte gg !
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 16:15:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi