Oh, ja. MStream.Free war natürlich an der falschen Stelle. Das hat das Problem allerdings nicht gelöst. Der Quelltext sieht jetzt so aus:
Delphi-Quellcode:
procedure TForm1.TCPServerExecute(AContext: TIdContext);
var
MStream: TMemoryStream;
SizeOfIncomingStream: Integer;
IDS: TidStreamVCL;
begin
AContext.Connection.IOHandler.WriteLn(LEdtOwnerName.Text);
MStream := TMemoryStream.create;
IDS := TidStreamVCL.Create(MStream);
try
// Empfangen:
with AContext.connection do begin
try
SizeOfIncomingStream := Socket.ReadInteger;
Showmessage('size'+inttostr(SizeOfIncomingStream));
Socket.ReadStream(IDS, SizeOfIncomingStream);
Showmessage('test0');
finally
// Disconnect;
end;
end;
// Damit der Inhalt von IDS in FStream übertragen wird:
IDS.VCLStream.Position := 0;
Showmessage('test1');
finally
FreeAndNil(IDS);
end;
//jetzt kannste irgendetwas mit dem Stream machen, z.B. wieder in ein bitmap laden:
ContactScreenForm.Image1.Picture.Bitmap.LoadFromStream(MStream);
Showmessage('test2');
Showmessage('size:'+inttostr(MStream.Size));
mStream.Free;
end;
Die ausgaben lauten:
"size62009"
"test0"
Danach kommen keine messages mehr.
Ich kann mir das nicht erklären.
Dass der Stream nicht in einem Stück ankommt glaube ich eigentlich nicht, da mir ja in der ersten Messagebox eine Größe angezeigt wird. Und dann muss es irgendwo einen Fehler geben, sonst würde ich doch die Größe von MStream angezeugt bekommen...