Mega Code Archive

 
Categories / Delphi / LAN Web TCP
 

How to transfer an object over a socket

Title: how to transfer an object over a socket? Question: TMemoryStream, Indy, Socket Answer: In my project, I have to be able to transfer an object between clients and servers. I have tried to write some codes. Unluckily, there is always an exception "out of memory while expanding memory stream". I dont know why. Hope someone can help me. thanks. By the way, I use Indy to build connections. My codes here: unit Data; interface uses Classes; Type TData = class(TComponent) private FStr : String; public constructor Create(AnOwner : TComponent); override; destructor Destroy; override; published property Str : String read FStr write FStr; end; implementation constructor TData.Create(AnOwner : TComponent); begin inherited Create(AnOwner); FStr := 'It is created!!!'; end; destructor TData.Destroy; begin inherited Destroy; end; end. implementation {$R *.dfm} uses Data; procedure TForm1.Button1Click(Sender: TObject); begin IdTCPServer1.Active := true; end; procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread); begin Button1.Caption := 'a client'; end; procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); var FData : TData; FStream : TMemoryStream; begin FData := TData.Create(nil); FStream := TMemoryStream.Create; AThread.Connection.ReadStream(FStream); FStream.ReadComponent(FData); // Here the exception comes up!!! Edit1.Text := FData.Str; FStream.Free; FData.Free; end; end. implementation uses Data; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin IdTCPClient1.Connect(); Button1.Caption := 'OK'; end; procedure TForm1.Button2Click(Sender: TObject); var FData : TData; FStream : TMemoryStream; begin FData := TData.Create(nil); FStream := TMemoryStream.Create; FStream.WriteComponent(FData); IdTCPClient1.WriteStream(FStream); FStream.Free; FData.Free; end; end.