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