首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

求教TMemoryStream 怎么通过inty9(tcp)用 Record传输/接收

2013-04-20 
求教TMemoryStream 如何通过inty9(tcp)用 Record传输/接收如题求教如何处理record如下typetdatarecordi:i

求教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,传输,然后接收端收到后再把二进制数据还原成对象

热点排行