Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Cuál es la Mejor forma de Eliminar Conexiones Clientes de un Server Indy (https://www.clubdelphi.com/foros/showthread.php?t=25855)

R_Richards 05-10-2005 22:10:40

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.

dec 05-10-2005 23:18:29

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... ;)

R_Richards 06-10-2005 14:28:58

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...

jachguate 06-10-2005 16:50:23

Si los clientes están activos, lo mas educado me parece que sería enviarles un mensaje indicandoles que deben desconectarse. ¿no?

Saludos.

fide_uci 22-07-2010 15:11:09

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 !


La franja horaria es GMT +2. Ahora son las 14:33:28.

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