Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #18  
Antiguo 26-05-2006
Status Quo Status Quo is offline
Miembro
 
Registrado: may 2006
Posts: 23
Poder: 0
Status Quo Va por buen camino
Código

Hola Seoane.

Esto no está montado en mi aplicación porque me daba tantos poblemas que lo hice aparte. Está basado en uno que recomendaban en el club en una determinada página (no recuerdo cual). Voy a mirar lo que me has mandado y voy a tratar de montarlo todo en mi apliación, porque aquí por ejemplo mando los ficheros eligiendo el que quiero y en mi aplicación debo hacer que cada cierto tiempo mire a ver cuales han sido modificados, creados o borrados y los envíe al cliente. Una sincroniación de ficheros, todo lo que haga en el servidor debe hacerse en el cliente.

En lo que te mando tengo dos socket, uno dedicado a mandar el tamaño del fichero (servidor -> cliente) a enviar y otro que envía el fichero (cliente ->servidor). Lo he hecho así por los problemas que me daba el meter la información en los fragmentos del fichero, pero ahora viendo que funciona lo que me estás aconsejando, voy a unificarlo todo y a emplear sólo un socket (que es cómo me han pedido que lo haga).


El código para enviar ficheros es:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
stream:TStream;

P: Paquete;

begin
   if ServerSocket1.Active = True then
   begin
      OpenDialog1.Filter := 'All Files (*.*)';
      OpenDialog1.FilterIndex := 1;
      if OpenDialog1.Execute then
      begin
         Edit1.Text := ExtractFileName(OpenDialog1.FileName); //He puesto un boton y un Dialog  para escojer el fichero

         ServerSocket1.Socket.Connections[0].SendText('FILE!'+Edit1.Text);
         sleep(2000);
         Streamsize := TFileStream.Create(OpenDialog1.FileName, fmopenread);
         Sleep(2000);
         ServerSocket1.Socket.Connections[0].SendText('SIZE!'+Edit2.Text);
         Streamsize.Position := 0;
         Streamsize.Free;
         sleep(2000);

         ClientSocket2.Address := Edit3.Text;
         ClientSocket2.Open; // Preparado para enviar el fichero en el segundo socket

         stream:=TFileStream.Create(OpenDialog1.FileName, fmopenRead);
         P.Tamano:=stream.Read(P.Buffer,SizeOf(P.Buffer));

        repeat
            Application.ProcessMessages;

            P.Tipo:= 1;
            ClientSocket2.Socket.SendBuf(P,sizeof(P)-1);
            P.Tamano:= stream.Read(P.Buffer,SizeOf(P.Buffer));

        until(P.Tamano=0);
        stream.Free;

      end;
   end
     else
     MessageDlg('Error de conexión', mtError, [MbOK],0);
end;



El código para recibir el fichero enviado es:


Código Delphi [-]
procedure TForm1.ServerSocket2ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
  // Este segundo socket es el que se encarga de la recepción de los ficheros

var
    IncommingLen, RecievedLen: integer;
    Filepath: string;

    P: Paquete;
begin
   Timer1.Enabled := True;
   IncommingLen := socket.ReceiveLength;
   Filepath := ExtractFilePath(Edit1.Text)+Edit1.Text;



    while IncommingLen > 0 do
    // Asegurar que el proceso termina
    begin

       RecievedLen := Socket.ReceiveBuf(P, Sizeof(P));

    if RecievedLen <= 0 then
    begin
           Break
       end
    else

      IncommingStream.Write(P.Buffer, P.Tamano);

      ProgressBar1.StepBy(RecievedLen);

     if IncommingStream.Size >= strtoint(Edit2.Text) then
       begin

       IncommingStream.Free;
       memo1.Lines.Add('File '+Edit1.Text +' Recieved Successfuly');
       memo1.Lines.Add('Time Taken to Recieve File ' +IntToStr(TimeTaken)+' seconds');
       ClientSocket1.Socket.SendText('DONE!');
       Edit1.Text := '';

       Edit2.Text := '';
       ProgressBar1.Position := 0;
       Timer1.Enabled := False;
       TimeTaken := 0;
       if Messagedlg('Would you Like to open the recieved file?', mtConfirmation, [MbYes,MbNo],0) = MrYes then  
       begin
         ShellExecute(Form1.Handle, 'open', pchar(Filepath),nil, nil, SW_NORMAL); 
       end;
       Break;                                                                         
    end;
   end;
  end;

Voy a ponerme a currar como un loco y voy a mirarme bien lo que me has mandado.
El código que he puesto a lo mejor está un poco caótico...bueno..voy a ir trabajando y luego te cuento.
Responder Con Cita
 


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
Recorrer arreglo Perrero80 Varios 3 18-05-2006 22:52:27
Compatibilidad entre PChar y String vick Conexión con bases de datos 5 24-10-2005 21:50:35
¿como pasar de String dentro de un PChar? Moises22 Varios 6 27-09-2005 15:43:47
Pchar y String superhopi Varios 8 19-08-2004 09:54:06
problemas de compatibilidad de tipos pchar y string VRO Varios 2 13-05-2004 10:29:34


La franja horaria es GMT +2. Ahora son las 12:23:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi