Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Enviar archivos Indy 10 (https://www.clubdelphi.com/foros/showthread.php?t=63510)

maurici0 17-02-2009 18:32:31

Enviar archivos Indy 10
 
Editado: ya esta resuelta la duda (Espero que algun administrador pueda cambiar el titulo y ponerle resuelto, esta la solución mensaje #7...

Hola a todos, antes que nada soy nuevo por aca :)..

Bueno mi duda es la siguiente:

Teoria:
Tengo mi cliente y servidor, lo que quiero hacer es que el usuario (seleccione un archivo), y le de enviar, para que el servidor lo cache y lo guarde en una carpeta (ya asiganda previamente), pero con indy y sin usar FTP :S, ya que despues el servidor le regresa un archivo al cliente (una especie de actualizacion).


Resumen:
Cliente envie archivo -> servidor cache y guarde -> servidor genera un archivo ->envia al cliente ->el programa del cliente lo guarda.


Alguna idea de como mandarlo?,
Basandome en tutoriales y toda la cosa, puedo enviar desde un cliente mensajes (tipo chat) al servidor. (Uso el IdTCPClient1, y el IdTCPServer1)



Gracias, espero haberme explicado bien.

ElKurgan 18-02-2009 07:46:44

En esta página tienes un faq que puede venirte de perlas... Un problemilla:

¡¡ Está en francés !! Aunque creo que el código es bastante evidente.

Un saludo

maurici0 18-02-2009 15:57:17

Muchas gracias ElKurgan, lo estare checando y si me sirve lo que necesito te lo agradecere mas jejeje....

Estuve investigando en el foro que lo hacen con el idHTTP, pero es para el 9 :S...
Esperare a que alguien mas responda (En lo que reviso la pagina que me dieron)..



Gracias!

maurici0 18-02-2009 21:53:59

En efecto, viendo la pagina que me dices, esta lo que necesito, solo que la instrucción TIdStreamVCL no la tengo, nose si cambie en alguna versión o algo asi, he revisado mi libreria y si tengo el archivo TIdStreamVCL.dcu, y he buscado cual es la que sustituye a esa y no encuentro nada, espero alguien me pueda ayudar, gracias!

Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
 LWrapper : TIdStreamVCL;
 LStreamSize : int64;
begin
 IdTCPClient1.Connect;
 try
   LWrapper := TIdStreamVCL.Create(TFileStream.Create('c:\test.txt',fmOpenRead), True);
   try
      {Récupérer la taille du flux original}
      LStreamSize := LWrapper.VCLStream.Size;
      {Envoyer la taille}
      IdTCPClient1.IOHandler.Write(LStreamSize);
      {Envoyer le flux}
      IdTCPClient1.IOHandler.Write(LWrapper, 0);
   finally
      FreeAndNil(LWrapper);
   end;
 finally
   IdTCPClient1.Disconnect;
 end;
end;

ElKurgan 19-02-2009 08:11:26

¿Tienes bien instaladas las Indy 10?

Porque yo encuentro su definición en la Unit "IdStreamVCL.pas"

Un saludo

maurici0 26-02-2009 16:22:36

Pues tengo el delphi 2009 lite... no le he tocado absolutamente nada, de hecho baje el indy10 de la pagina y al compilar los

IndySystemX0.dpk (in Lib\System) <- Me sale 3 errores (seleccione el 120)
IndyCoreX0.dpk (in Lib\Core) -> me sale 1 error
IndyProtocolsX0.dpk (in Lib\Protocols) -> ya ni lo intente.

maurici0 26-02-2009 20:07:01

Bueno al final lo hice de otra manera pero se pudo:

Cliente:
Código Delphi [-]
procedure TForm4.Button1Click(Sender: TObject);
var
   FStream: TFileStream;

begin
  //Creamos conexion
  IdTCPClient1.Host:='127.0.0.1'; //Prueba local
  IdTCPClient1.Port:=1050;
  IdTCPClient1.Connect;
  IdTCPClient1.Socket.WriteLn(mensaje.text); //Tomo un mensaje escrito

  FStream := TFileStream.Create('C:\cliente.jpg', fmOpenRead); //Busco el archivo que quiero pasar
  try
    IdTCPClient1.IOHandler.Write(Fstream,0,true); //Mando archivo
  finally
    IdTCPClient1.Disconnect;
  end;
  FreeAndNil(FStream);

  IdTCPClient1.Disconnect;

end;

Servidor:
Código Delphi [-]
procedure TForm5.IdTCPServer1Execute(AContext: TIdContext);
var
sMensaje: String;
  s, sCommand, sAction : string;
    fStream : TFileStream;

begin
  //Traigo y  muestro mensaje
  sMensaje := AContext.Connection.Socket.ReadLn;
  Mensaje.Lines.Add( 'De: ' + AContext.Binding.PeerIP );
  Mensaje.Lines.Add( 'Mensaje: ' + sMensaje );
  //Guardo archivo enviado
  FStream := TFileStream.Create('C:\prueba\servidor.jpg', fmCreate);
  try
    AContext.connection.IOHandler.ReadStream(fstream);
  finally
    AContext.connection.Disconnect;
  end;
  FreeAndNil(FStream);

end;


Espero que a alguien le sirva :), gracias a ElKurgan por su tiempo.


La franja horaria es GMT +2. Ahora son las 09:46:22.

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