Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-03-2014
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Cliente FTP

Buenas,
Estoy desarrollando una app la cual recoge datos y posteriormente los debe enviar por ftp a un ordenador.
Siempre suelo desglosar la aplicación en otras para probar por separado y e aquí lo que vendría a ser la parte que envía el fichero.

El siguiente código conecta, valida y envía el fichero pero es como si una vez enviado no desconectase dándome en el terminal error "Read timed out"

Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
var
   clienteFtp: TIdFTP;
 begin
   clienteFtp := TIdFTP.Create(Self);
   try
     with clienteFtp do
     begin
       Username := 'david';
       Password := '1234';
       Host := '192.168.1.25';
       Connect; // Conectamos
       if connected  then
       begin
       ShowMessage('Conectado al servidor FTP');
       Put(TPath.Combine(TPath.GetDocumentsPath, 'subir.txt'), 'subir.txt', False);
       Disconnect;
       end;

     end;
      except
    on EConvertError  do
    ShowMessage('Error Al Conectar al servidor FTP');
   end;
 end;

Como curiosidad si comento la linea:
Código Delphi [-]
Put(TPath.Combine(TPath.GetDocumentsPath, 'subir.txt'), 'subir.txt', False);
funciona, correctamente es decir, el cliente inicia sesión en el servidor de ftp, en el terminal muestra el mensaje y al aceptar se puede ver en el servidor que el cliente a desconectado.
Alguna sugerencia, gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 04-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿No tiene un evento que salte cuando ha terminado de hacer la subida?
Supongo que debe tenerlo, y es ahí donde debes desconectar.

Por cierto, recuerda poner títulos descriptivos a tus preguntas, gracias
Responder Con Cita
  #3  
Antiguo 04-03-2014
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Gracias casimiro por responder,

acabo de probar en el evento IdFTP1AfterPut y en IdFTP1WorkEnd pero el resultado es el mismo, la aplicación del móvil se "congela" y acaba apareciendo el mensaje, "Read timed out".
La ruta del fichero esta bien ya que si adrede la modifico muestra en el terminal el mensaje que no encuentra el fichero.

¿Puede deberse a algún fallo por parte de la compatibilidad del componente con android?
Gracias por las sugerencias.
Responder Con Cita
  #4  
Antiguo 04-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
La verdad es que no he usado esos componentes. ¿No trae alguna demo?

Desde luego, si tienes esos eventos de fin de put y de work, debes usarlo,
Responder Con Cita
  #5  
Antiguo 04-03-2014
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Gracias casimiro,
pues en la web de embarcadero no e sabido encontrar ninguna demo acerca de como utilizar el ftp, lo mas "raro" es que el mismo listado tan solo variando la linea del put y adaptándola para entorno escritorio Put('c:/subir.txt' ,'subir.txt', false) el listado funciona bien.

gracias por adelantado!!
Responder Con Cita
  #6  
Antiguo 05-03-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Revisa los permisos de la aplicación.
¿Es posible que alguna falta de permisos te esté bloqueando la subida?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 05-03-2014
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Gracias Neftali

yo pensé también en eso pero el caso es que si lo sube y al completo, el problema es como si no supiese que se completo la subida quedándose "parado" en la linea del idFTP1.PUT
Responder Con Cita
  #8  
Antiguo 01-03-2019
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
Hola, compañeros.
Estoy teniendo exactamente el mismo problema que barrakuda.
No se si barrakuda lo resolvió hace 4 años.
Código Delphi [-]
FS.Clear;
         Memo1.Lines.SaveToStream(FS); //Para grabar nuevamente en internet
      // Hacemos los cambios necesarios 
         FS.Position := 0;
         // Cambiamos el nombre al fichero en internet
         IdFTP1.Rename(Filename, FileTemp); // Aunque no borres antes no da error
         
         IdFTP1.Put(FS, FileName, False, 0); // Subimos el fichero modificado

Os voy a dar una pista por si sirve de algo.

Este mismo código funciona perfectamente si el dispositivo android está conectado por Wi-Fi.

Mis disculpas por abrir un post de hace tanto tiempo.

Saludos a todos. Y gracias por vuestra ayuda.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #9  
Antiguo 03-03-2019
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 545
Poder: 17
jhonalone Va por buen camino
Hola a todos.

Como es mi costumbre cuando resuelvo algo, os dejo la solución que a mí me ha funcionado.

Mi operador telefónico en casa y en el móvil es Orange. (No sé si el problema sucede con otros operadores)

Como os comentaba, cuando uso el móvil con el Wi-Fi de casa no hay ningún problema, los ficheros se suben por FTP a mi Web sin problemas.

El problema surgió al intentar hacer lo mismo desconectando el móvil de la Wi-Fi. Y utilizar los datos móviles del dispositivo,

He llegado a la conclusión de que el servidor que usa el operador es el que da el problema. Pues con ficheros realmente pequeños no da problemas. Cuando digo pequeños es de 1000 bytes o poco más.

Yo estaba intentando subir un fichero de 17600 bytes (Que a mí me parece pequeño...)

Al final he optado por el lema de Julio César: "Divide y vencerás" y así ha sido.

Dejo un fragmento de código por si sirve a alguien.

Código Delphi [-]
........................................
type
  TForm1 = class(TForm)
    .....
    Memo1: TMemo;
    ......

........................................
var

filename, FileTemp, FileUsed : String;
idFTP1 : TidFTP;
FS, FS2, FSInter: TMemoryStream;

................................................

        FS.Clear;
         Memo1.Lines.SaveToStream(FS); //Para grabar nuevamente en internet
      
         Sleep(300);
         FS.Position := 0;
         // Tenemos que subir el fichero poco a poco porque cuando
         // usamos los datos móviles en el dispositivo no sube el fichero
         // de una vez. PARECE QUE CON WIFI SI QUE LO SUBE
         I := FS.Size - FS.Position;
         if I > 1000 then I := 1000;

         FSInter.Clear;
         FSInter.CopyFrom(FS,I); // Si I > FS.Size - FS.Position lee
         FSInter.Position := 0;  // fuera de FS.Size y daria error
         IdFTP1.Put(FSInter, FileName, False, 0);

         while FS.Position < FS.Size
         do begin
            I := FS.Size - FS.Position;
            if I > 1000 then I := 1000;

            FSInter.Clear;
            FSInter.CopyFrom(FS,I); // Si I > FS.Size - FS.Position lee
            FSInter.Position := 0;  // fuera de FS.Size y daria error
            IdFTP1.Put(FSInter, FileName, True, 0);
            end;

Saludos cordiales.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #10  
Antiguo 06-03-2019
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Genial que hayas dado con una solución. Y gracias por compartirla.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #11  
Antiguo 06-03-2019
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jhonalone Ver Mensaje
El problema surgió al intentar hacer lo mismo desconectando el móvil de la Wi-Fi. Y utilizar los datos móviles del dispositivo,

He llegado a la conclusión de que el servidor que usa el operador es el que da el problema. Pues con ficheros realmente pequeños no da problemas. Cuando digo pequeños es de 1000 bytes o poco más.
Aunque has resuelto el problema, no deja de ser extraño tener que partir el envío. Supongo que el problema está relacionado con la velocidad de transferencia: con wi-fi el envío será instantáneo. No sé cómo se hace con Delphi, pero en android todo este tipo de operaciones debe hacerse en segundo plano justo para no congelar la interfaz. Quizá el IdFTP ya lo maneje de por sí, pero si no, entonces habría que meter la subida del archivo en segundo plano.

// Saludos
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cliente / Servidor carlosro_ec C++ Builder 2 11-12-2005 18:06:14
cliente/servidor alfil123 Conexión con bases de datos 1 01-12-2005 17:40:42
Conexión Cliente-Cliente Clantt Providers 1 28-09-2004 18:46:34
Cliente V.S. Cliente AGAG4 Conexión con bases de datos 2 09-09-2004 20:28:39
y mi cliente???? jzginez Firebird e Interbase 7 24-02-2004 19:12:24


La franja horaria es GMT +2. Ahora son las 20:32:46.


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