AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Problem mit TFileStream und Indy TidStreamVCL
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit TFileStream und Indy TidStreamVCL

Ein Thema von ManuMF · begonnen am 29. Jul 2005 · letzter Beitrag vom 14. Aug 2005
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz