求教TMemoryStream 如何通过inty9(tcp)用 Record传输/接收
如题求教如何处理
record如下
type
tdata=record
i:integer;
s:string[100];
ms:TMemoryStream;
end;
ptdata=^tdata;
发送方
procedure TForm1.Button1Click(Sender: TObject);
var
c:ptdata;
qms:TMemoryStream;
begin
qms:=TMemoryStream.Create;
RecordsetToMS(ADOQuery1.Recordset,qms);//转化用的这个正常的,我直接发stream是可以读出的.
c:=allocmem(sizeof(tdata));
c^.i:=1;
c^.s:='tset';
c^.ms:=qms;
idtcpclient1.Connect;
idtcpclient1.WriteBuffer(c^,sizeof(tdata));
freemem(c);
end;
接收方
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
a:ptdata;
o:integer;
z:string;
qms:TMemoryStream;
begin
a:=allocmem(sizeof(tdata));
athread.Connection.ReadBuffer(a^,sizeof(tdata));
try
o:=a^.i;
z:=a^.s;
try
qms:=a^.ms;
memo1.Lines.Add(inttostr(qms.Size));//这里我发现获取不到大小
except
end;
finally
end;
end;
接收方 string 和integer都可以正常接收,TMemoryStream接收后就是读取不出来,然后我试着看了下size发现不能获取到. delphi tcp record TMemoryStream
[解决办法]
memorystream是对象,是不可能传过去的
必须把对象序列化,也就是转成二进制数据buff,传输,然后接收端收到后再把二进制数据还原成对象