Einzelnen Beitrag anzeigen

Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#1

Problem mit TFileStream und Indy TidStreamVCL

  Alt 29. Jul 2005, 11:53
Hallo,

ich will eine Datei über eine TidTCPClient bzw. -Server verschicken.
Hierbei sei gleich gesagt: Es funktioniert. Aber: Nur weil ich einen try-except-Block ohne Ereignis bei except eingebaut habe. Sonst würde beim Client eine Meldung erscheinen: "Fehler | Stream-Fehler", auch der Server würde einfach an der Stelle stoppen.
Hier der Code:

Delphi-Quellcode:
// Client

procedure TSendeForm.DateiSenden;

var FStream : TFileStream;
    IDS : TidStreamVCL;

begin
  StatusText.Caption := 'Client: Bereit zur Datenübertragung, Sende...';
  TCPSender.Host := host; // String, vorher eingegeben

  FStream := TFileStream.Create(DateiName, fmOpenRead);
  IDS := TidStreamVCL.Create(FStream); // Ein Indy-Stream muss bei create ein TStream übergeben werden

  try
    IDS.VCLStream.CopyFrom(FStream, FStream.Size); // Hier kommt der Fehler im Client (wenn nicht in try...except)
  except
    { Nichts! }
  end;

  with TCPSender do
  begin
    Connect;
    try
      Socket.Write(IDS, 0, true);
    finally
      StatusText.Caption := 'Fertig, warte auf Bestätigung...';
      Disconnect;
    end;
  end;

  FStream.Free;
  IDS.Free;
end;


// Server

procedure TEmpfangsForm.TCPReceiverExecute(AContext: TIdContext);

var FStream : TFileStream;
    SizeOfIncomingStream : Integer;
    IDS : TidStreamVCL;

begin
  FStream := TFileStream.Create(DateiName, fmCreate);
  IDS := TidStreamVCL.Create(FStream);

  SizeOfIncomingStream := AContext.Connection.Socket.ReadInteger;
  
  AContext.Connection.Socket.ReadStream(IDS, SizeOfIncomingStream);
  AContext.Connection.Disconnect;

  try
     FStream.CopyFrom(IDS.VCLStream, IDS.VCLStream.Size); // auch hier würde der Fehler auftreten
  except
    { Nichts }
  end;
     
  FStream.Free;
  IDS.Free;

  // (Weitere Behandlung der Datei)
end;
Das wär's. So funktioniert es. Aber ohne try...except würde eben der Fehler auftreten. Woran könnte es liegen?

Danke,
Manuel
  Mit Zitat antworten Zitat