如定义了一个record:
type
  RTeamReCord = record     
    ID :string;                      
   ID1 :Integer;
   ID2 :Double;
   ID3 :Boolean;
end;怎样用socket send过去 然后在另一端recv接收然后转换类型回record呢?

解决方案 »

  1.   

    数字类型的都好办,字符串的要定义一下协议。主要是记录里的ID字段。
    协议如下:2个字节存储ID的长度+ID字符串,长度为前两个字节所存储的值+4个字节的ID1+8个字节ID2+1个字节ID3,0-表示false,1-表示true
    procedure SendTreamRecord(rs: RTeamReCord);
    var
      i: integer;
      len: word;
      buf: array[0..1023] of byte;
    begin
      i := 0;
      len := Length(rs.ID);
      Move(len,buf[i],2);
      i := i+2;
      Move(rs.Id[1],buf[i],len);
      i := i+len;
      Move(rs.Id1,buf[i],sizeof(rs.ID1));
      i := i+sizeof(rs.ID1);
      Move(rs.Id1,buf[i],sizeof(rs.ID2));
      i := i+sizeof(rs.ID2);
      if rs.ID3 then buf[i] := 1
      else buf[i] := 0;
      //sendbuf...
    end;
      

  2.   

    建议ID类型用定长,即 array[0..len-1] of char; 就不存在此问题,可以直接转。
      

  3.   

    接收的时候缓存区也用byte类型来接收码?
      

  4.   

    接收的时候缓存区也用byte类型来接收码?
      

  5.   

    把id改为定长
    ID   :string[20]; 两边都用同一个记录类型,就可以自由收发了