Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Se congela al querer desconectar los clientes de FTP (https://www.clubdelphi.com/foros/showthread.php?t=78701)

Faust 10-05-2012 17:35:45

Se congela al querer desconectar los clientes de FTP
 
Hola, muy buenos días:

Hace mucho que no entraba al club para hacer preguntas, es que donde trabajo se han enfocado un poco más a C#, pero mi pasión es delphi, estoy haciendo en este momenbto una aplicación para traspasar archivos de una pc a otra y lo más fácil que se me ha ocurrido es hacerlo mediante FTP así que me dí a la tarea de hacer el servidor y el cliente apoyándome en los ejemplos de los componentes indy y todo iba bien hasta que se me ocurrió implementar un log en el FTPServer utilizando el IdServerInterceptLogEvent. Mi problema es el siguiente: Ejecuto mi servidor FTP y lo activo, lo pruebo utilizando una ventana del explorador de windows para conectarme, ya implementé los eventos para navegar por el server y crear carpetas, al cerrar mi servidor no me preocupaba por cerrar las conexiones de los clientes pero desde que implementé el log con IdServerInterceptLogEvent tuve que hacerlo porque sino se queda congelada mi aplicación al querer cerrarla, para cerrar las conexiones de los clientes hago lo siguiente:

Código Delphi [-]
    with FTPServer.Contexts.LockList do
      for i := 0 to Count - 1 do
        if TIdServerContext(Items[i]).Connection.Connected then
          TIdServerContext(Items[i]).Connection.Disconnect;                     // En este punto se congela mi aplicación
    FTPServer.Contexts.UnlockList;
    FTPServer.StopListening;
    FTPServer.Active := false;
    btnListen.Caption := 'Conectar'

Y mi aplicación sigue congelándose a veces. :mad:

He ejecutado mi aplicación sin utilizar IdServerInterceptLogEvent y funciona muy bien, de todas las veces que he ejecutado solo una vez se quedó congelada, pero si uso IdServerInterceptLogEvent aprox. tres de cada cinco veces que la ejecuto se congela, ahora si cierro el formulario haciendo clic en el botón cerrar del formulario (esto no desconecta a los clientes) si me muestra errores "access violation at address 0xXXXXXX" lo que me hace sospechar que se hace referencia a un objeto nulo, me imagino que tiene algo que ver con los hilos de los clientes activos y que IdServerInterceptLogEvent trata de accesar a ellos sin éxito.

He buscado más ejemplos y ayuda en internet y la verdad que no encontré nada que me ayude. Uso Delphi XE2 con los indy 10.5.8.0

¿estoy cerrando bien las conexiones de mis clientes?
¿no sirve el componente IdServerInterceptLogEvent?
¿debo crear mi log usando otro método?
¿debo cambiar de carrera?
¿quién fue el autor intelectual del asesinato de Kennedy?
¿existe el chupacabras?

Bueno me conformo con que me ayuden a solucionar mi problema con los componentes indy.

De antemano muchas gracias por sus respuestas y voy a andar dándoles lata por acá :).


La franja horaria es GMT +2. Ahora son las 20:52:33.

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