Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-05-2006
Status Quo Status Quo is offline
Miembro
 
Registrado: may 2006
Posts: 23
Poder: 0
Status Quo Va por buen camino
Protocolo envío de ficheros entre pcs

Hola de nuevo…
Me está agobiando la realización del programa.
Tengo que sincrozar los directorios que hay en un directorio de un servidor con los que hay en un cliente.
Para ello tengo que mandar (a trozos) los ficheros al cliente mediante un protocolo inventado por mi…
Al final he conseguido hacer esto…que…no hace una m…
No he descubierto como mandar al cliente los tozos de bytes con cabecera incluida…así que lo que hago es envíar un texto con la cabecera antes de eviar cada trozo…

El caso esque siempre me da error al volver a leer un trozo…del fichero en el servidor.
Comentando lo que está en negrita, consigo que no de error en el servidor. Pero si me lo da en el cliente (en negrita ) al intentar crear el fichero…

Me estoy deserperando. Por favor si no os importa echarle un vistazo al enjendro que he hecho y orientarme un poco.

Gracias

Función que manda ficheros al cliente:

Código:
procedure TForm1.ActualizarCliente(nombreFichero:string);
 var
  stream: TStream;
  leidos: Cardinal;
  trama:TMemoryStream;
  buf:pchar;
  nombFich:string;
  buffer:array[0..256] of byte;
  msjFICH:String;
  msjTRAMA:String;
  i:integer;
  PCliente:TPuntero;
  numFragm:integer;
  tam:integer;
  tipo: char;
begin

 

  stream:=TFileStream.Create('Maestro\'+ nombreFichero,fmOpenRead);
  tam :=(stream.Size);
  leidos:=stream.Read(buffer,SizeOf(buffer));
  ShowMessage('Pasa por las asig');
  tipo:='f';
  for i:=0 to MiLista.Count-1 do{Se recorren los clientes almacenados en la lista}
    begin
ShowMessage('Pasa por el for');
     PCliente:=MiLista.Items[i];
     msjFICH:=tipo+ formatFloat('0000',tam)+ formatFloat('00',length(nombreFichero))+ nombreFichero;
     PCliente^.Conexion.SendText(formatFloat('000',length(msjFICH)+3)+msjFICH);
    end;
  tipo:='t';
  repeat
    Application.ProcessMessages;
    trama:=TMemoryStream.Create;
    trama.WriteBuffer(buffer,leidos);

    ShowMessage('Pasa por el repeat');


    for i:=0 to MiLista.Count-1 do{Se recorren los clientes almacenados en la lista}
    begin
     PCliente:=MiLista.Items[i];


     msjTRAMA:=(tipo+ formatFloat('000',numFragm)+formatFloat('000',leidos));
     PCliente^.Conexion.SendText(formatFloat('000',length(msjTRAMA)+3)+msjTRAMA);

     ShowMessage('Pasa por el sendtext');
     PCliente^.Conexion.SendStream(trama);
         ShowMessage('Pasa por el sendstream');
    end;
     leidos:=stream.Read(buffer,SizeOf(buffer));//me da error
    ShowMessage('Pasa por leidos');
    trama.Position:=0;
    trama.Free;    until(leidos=0);
  stream.Position:=0;
  stream.Free;


end;




Cliente que recibe los ficheros del servidor

procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var
  //longCab:integer;
  MsjLocal:String;
  tipo:char;
  NombFich:String;
  tamMsj:integer;
  tamFich:integer;
  tamNombreFich:integer;

  numFrag:integer;
  FragLeidos:integer;


  TamEntrante:Integer;
  TamRecibido:Integer;

  buffer:array[0..9999] of byte;
  FicheroStream: TFileStream;

begin


    ColaMsj:=ColaMsj+Socket.ReceiveText;


    while (length(ColaMsj)>=7) do//Para cojer tamaño mensaje y tipo
    begin
        memo1.Lines.Add('cola '+ColaMsj);
        tamMsj:=StrToInt(copy(ColaMsj,1,3));
        memo1.Lines.Add('tam: '+IntToStr(tamMsj));
        tipo:=ColaMsj[4];
        memo1.Lines.Add('tipo'+tipo);
        if (length(ColaMsj)>=tamMsj) then
         begin
          if tipo = 'f' then
           begin
             tamFich:=StrToInt(Copy(ColaMsj,5,4));
             memo1.Lines.Add('tamfich: '+IntToStr(tamFich));
             tamNombreFich:=StrToInt(Copy(ColaMsj,9,2));
             memo1.Lines.Add('tamnombrefich: '+IntToStr(tamNombreFich));
             NombFich:=Copy(ColaMsj,11,tamNombreFich);
             memo1.Lines.Add('Nombrefich: '+NombFich );

             msjLocal:=Copy(ColaMsj,1,tamMsj); // Cogemos el primer mensaje de la cola de mensajes
             delete(ColaMsj,1,tamMsj);         // quitamos el primer mensaje de la cola

           end
          else//Mensaje de trama
           begin
            numFrag:=StrToInt(Copy(ColaMsj,5,3));
            FragLeidos:=StrToInt(Copy(ColaMsj,8,3));

            msjLocal:=Copy(ColaMsj,1,tamMsj); // Cogemos el primer mensaje de la cola de mensajes
            delete(ColaMsj,1,tamMsj);         // quitamos el primer mensaje de la cola
           end;
          end;
       Sleep(1);


    FicheroStream := TFileStream.Create(NombFich, fmCREATE or fmOPENWRITE and fmsharedenywrite);
    TamEntrante:= Socket.ReceiveLength;
    while TamEntrante > 0 do
    begin
     TamRecibido:=Socket.ReceiveBuf(buffer,Sizeof(buffer));
      if TamRecibido > 0 then
      begin
        FicheroStream.Write(buffer,tamRecibido);
      end;
    end;
 end;
end;
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
Protocolo PPI SoulSoldier C++ Builder 2 23-07-2013 10:39:49
Envio de Mensajes entre aplicaciones edgusano API de Windows 6 21-12-2005 07:25:11
Protocolo jabber. Tony_G Internet 2 04-06-2005 13:14:58
Protocolo frontpage jam Internet 4 05-11-2003 20:33:44
Envio de archivos entre aplicaciones Mauricio Correa Varios 0 03-10-2003 07:29:57


La franja horaria es GMT +2. Ahora son las 19:42:52.


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