Hey! Guck dir einfach diesen Code an:
Filestream mit Indy
Dort wird eine Datei in einen Filestream geladen und versendet.
Du kannst aber jeden beliebigen Stream versenden, also auch einen MemoryStream:
Delphi-Quellcode:
procedure TSendeForm.DateiSendeButtonClick(Sender : TObject);
var
MStream: TMemoryStream;
IDS: TidStreamVCL;
begin
{ Hier wird die Datei "ermittelt" }
TCPSender.Host := HostEdit.text;
{ Die Streams initialisieren - Beim IDS wird FStream gleich eingelesen }
MStream := TMemoryStream.create;
//jetzt irgendwas in den Stream laden, beispeilsweise ein Bild, oder so:
aBitmap.savetostream(MStream);
//nun den Stream versenden:
try
IDS := TidStreamVCL.Create(MStream);
try
{ Senden }
with TCPSender do
begin
Connect;
try
Socket.Write(IDS, 0, true);
finally
Disconnect;
end;
end;
finally
FreeAndNil(IDS);
end;
finally
FreeAndNil(FStream);
end;
end;
Empfänger läuft so:
Delphi-Quellcode:
procedure TEmpfangsForm.TCPReceiverExecute(AContext: TIdContext);
var
MSTream: TMemoryStream;
SizeOfIncomingStream: Integer;
IDS: TidStreamVCL;
begin
{ Wo soll die Datei gespeichert werden? }
{ Wieder die Streams }
MStream := TMemoryStream.create;
IDS := TidStreamVCL.Create(FStream);
try
{ Empfangen }
with AContext.connection do
begin
try
SizeOfIncomingStream := Socket.ReadInteger;
Socket.ReadStream(IDS, SizeOfIncomingStream);
finally
Disconnect;
end;
end;
{ Damit der Inhalt von IDS in FStream übertragen wird }
IDS.VCLStream.Position := 0;
finally
FreeAndNil(IDS);
end;
//jetzt kannste irgendetwas mit dem Stream machen, z.B. wieder in ein bitmap laden:
aBitmap:=TBitmap.create;
aBitmap.loadfromstream(MStream);
end;
Ist eig. ziemlich einfach und alles(!!) im Forum zu finden...
LG, Alleinherrscher