Envoi de fichier ICS delphi

Fermé
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 - 11 mai 2009 à 09:12
Bonjour,
je dois effectuer un transfert de fichier par tcp grâce au composant twsocket mais je n'arrive pas à envoyer un gros fichier(10 Mo) de façon stable, par contre une image de 100 Ko est toujours envoyée et bien reçue. Pourriez-vous m'aider ?
Voici le code :

Type commun :
const
   StreamDataSize = 1024;
type
   TStreamPacket = record 
      FileName : shortstring;
      FileSize : int64;
      DataSize : integer;
      NbPacket : Integer;
      Datas    : array[0..StreamDataSize-1] of Byte;
end;

const
   StreamPacketSize = SizeOf(TStreamPacket);


Côté serveur :
procedure TForm1.WSocket1DataAvailable(Sender: TObject; ErrCode: Word);
var
   PQ : TStreamPacket;
   Len : Integer;
begin
   Len:= WSocket1.Receive(@PQ, StreamPacketSize);
   ii:= ii + 1;
   if (ii <> PQ.NbPacket) then ii:= ii - 1;
   Memo1.Lines.Add('Nombre de paquets : ' + IntToStr(ii));
   Memo1.Lines.Add('Nombre de paKets : ' + IntToStr(PQ.NbPacket));
   Memo1.Lines.Add('Total : ' + IntToStr(PQ.FileSize));
   Memo1.Lines.Add('Données : ' + IntToStr(PQ.DataSize));
   Memo1.Lines.Add('Compteur : ' + IntToStr(Compt));
   Memo1.Lines.Add('Position : ' + IntToStr(FStream.Position));
   Memo1.Lines.Add('Taille du paquet : ' + IntToStr(StreamPacketSize));
   if (Len <= 0) then Exit;
   try
      if (FStream.Size < PQ.FileSize) then begin
         if (ii = PQ.NbPacket) then begin
            Compt:= Compt + PQ.DataSize;
            Memo1.Lines.Add('Taille Avant : ' + IntToStr(FStream.Size));
            Memo1.Lines.Add('Position Avant : ' + IntToStr(FStream.Position));
            FStream.Write(PQ.Datas[0], PQ.DataSize);
            Memo1.Lines.Add('Données : ' + IntToStr(PQ.DataSize));
            FStream.Position:= Compt;
            Memo1.Lines.Add('Taille Après : ' + IntToStr(FStream.Size));
            Memo1.Lines.Add('Position Après : ' + IntToStr(FStream.Position));
         end;
      end;
   finally
      Memo1.Lines.Add('Taille finale : ' + IntToStr(FStream.Size));
      Memo1.Lines.Add('');
   end;
   WSocket1.ProcessMessages;
   WSocket1.SendStr('OK ' + IntToStr(ii) + ' ');
   WSocket1.ProcessMessages;
end;


Côté client :
procedure TForm1.WSocket1SessionConnected(Sender: TObject; ErrCode: Word);
var
   PQ : TStreamPacket;
begin
   if (ErrCode <> 0) then
      Memo1.Lines.Add('Impossible de se connecter, erreur #' + IntToStr(ErrCode))
   else begin
      Memo1.Lines.Add('== Connecté ==');
      PQ.FileName:= ExtractFileName('C:\Documents and Settings\Stagiaire3\test.jpg');
      FStream:= TFileStream.Create('C:\Documents and Settings\Stagiaire3\test.jpg', fmOpenRead);
      try
         PQ.FileSize:= FStream.Size;
         FStream.Position:= 0;
         while (FStream.Position <> FStream.Size) do begin
            ii:= ii + 1;
            PQ.DataSize:= FStream.Read(PQ.Datas[0], StreamDataSize);
            Memo1.Lines.Add('Position : ' + IntToStr(FStream.Position));
            PQ.NbPacket:= ii;
            Memo1.Lines.Add(IntToStr(WSocket1.BufSize));
            WSocket1.Send(@PQ, StreamPacketSize);
            Memo1.Lines.Add('DATAS ' + IntToStr(PQ.DataSize));
            Compt:= Compt + PQ.DataSize;
            Memo1.Lines.Add('Compteur ' + IntToStr(Compt));
            Memo1.Lines.Add('Nombre de paquets : ' + IntToStr(ii));
            Memo1.Lines.Add('Taille du paquet entier : ' + IntToStr(StreamPacketSize));
            WSocket1.ProcessMessages;
         end;
      finally
         FStream.Free;
         Memo1.Lines.Add('Nombre de paquets : ' + IntToStr(ii));
      end;
   end;
end;


Merci