PDA

Ver la Versión Completa : Envio de Stream con Indy


diegofhernando
16-09-2003, 22:22:50
Que tal foro...

Estoy terminando mi aplicación y todo me funciona perfecto excepto el envio de archivos... si, estoy enviando archivos usando sockets, el problema se presenta cuando envio archivos de mas de 2 MB en ese momento el servidor se CONGELA:confused: hasta que concluye la operación... ya intente con el AntiFreeze.. pero sigue igual. Por favor si alguien tiene la solución a este inconveniente le agradeceria que me la comunicara.


Salu2:cool:

jachguate
17-09-2003, 07:53:27
Me parece extraño que se congele el servidor... porque por definición es multihilos y todo el archivo se recibe en un hilo diferente al principal.

Es distinto en el cliente, donde por defecto el envio se ejecuta en el hilo principal. Lo recomendable es programar el envio de archivo en un hilo distinto (thread) y con ello el cliente no se congelará. Otra solución, si vos mismo lees el archivo y lo vas enviando por trozos, es que incluyas llamadas a Application.ProcessMessages en cada iteración, con el cuidado respectivo de deshabilitar botones, etc. para evitar que la llamada a ProcessMessages te haga estragos.

En fin... la idea es esa.

Hasta luego.

;)

diegofhernando
17-09-2003, 15:50:04
Gracias por tus sugerencias... voy a trabajar en eso.

Salu2:cool:

guillotmarc
17-09-2003, 15:59:18
Hola.

Por cierto, ¿ has probado a actualizar los componentes Indy ?, tuve problemas con el cliente de FTP (quedaba la aplicación colgada en algunos casos), y el soporte de Indy me comentó que los componentes Indy v8 de Delphi 6 estaban muy obsoletos, el problema se solucionó actualizando los componentes a la versión 9.

www.nevrona.com/indy/

Saludos.

diegofhernando
17-09-2003, 21:06:36
Que tal... Pues desafortunadamente estoy trabajando con la version 9 de los Indy... y definitivamente no funciona. Lo que pretendo ahora es utilizar los FTP; pero para mi desgracia no se como utilizarlos, con los indy hay un ejemplo pero muestra como conectarse a un servidor FTP, mi pregunta es ¿COMO IMPLEMENTO UN SERVIDOR FTP?:confused:

Les agadeceria enormemente si me pudieran orientar en este aspecto, solo lo básico o si me pudieran recomendar algun sitio donde encontrar esta información... pues he estado buscando y parece ser que nadie lo ha hecho :eek:

Gracias por su colaboración.

Salu2:cool:

Alzheimer
17-11-2009, 03:55:16
hola ....
aki te posteo una posible solucion utilizando los IdTCP de las Indy

del lado servidor:
pon un TIdTCPServer en una form y hazle un command handler k se llame upload por ejemplo y ponle al recibir el komando el siguiente kodigo:


procedure TForm1.IdTCPServer1UploadCommand(ASender: TIdCommand);
var
archivo : TFileStream;
fout: string;
begin
try
fout:= 'd:\'+ASender.Params[0];
archivo := TFileStream.Create(fout,fmCreate or fmOpenWrite);
ASender.Thread.Connection.ReadStream(archivo);
finally
archivo.Free;
end;
end;


del lado cliente:
inserta un TIdTCPClient.
kuando kieras enviar el archivo ejemplo usando un button:


procedure TForm1.Button1Click(Sender: TObject);
var
archivo: TFileStream;
AFile: string;
begin
AFile:= 'D:\Administrador\$h@\FantasticTool.exe';
if FileExists(AFile) then begin
archivo:= TFileStream.Create(AFile,fmOpenRead);
try
IdTCPClient1.Connect();
if IdTCPClient1.Connected then begin
IdTCPClient1.WriteLn('Upload '+ExtractFileName(AFile));
IdTCPClient1.WriteStream(archivo,true,true);
end;
finally
archivo.Free;
IdTCPClient1.Disconnect;
end;
end else begin

end;
end;



espero te sirva de ayuda... es menos k implementar un FTP kompleto. aunke si estas interesado en algo komo esto te rekomiendo utilizar el de las ICS. (en mi opinion esta mucho mas trabajado y kompleto ***ademas de muy sencillo*** k el de las INDY)

salu2