我在用IdUdpServer控件时,将收到的数据用ReadBuffer读到一个结构里面,然后我把这个结构Move到我定义的字节数组,结果发现几千个字节,只读出来96个,请高手帮忙!
结构是这样定义的
{------------------------------------------------}
type
  StrucA = Record
    id: integer;
    nType: Dword;
    Content: Array [0..64000] of char
  end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  RcvBuffer: StrucA;
  ArrBuffer: Array [0..65000] of byte;
begin
  Adata.ReadBuffer(StrucA,Adata.size);
  if StrucA.nType=2 then
  Move(StrucA,ArrBuffer,Adata.size);
  {....就是在这发现只有96个字节了}
end;{------------------------------------------------}
其实我定义这个结构只是为了读取nType,如果不用结构也能读到nType的值(也就是ArrBuffer[4],4)的话就好了,我不知道怎么在Array of byte字节数组中读取一个占四个字节的Dword型数据,请大家帮帮我,谢谢!

解决方案 »

  1.   

    Move(StrucA,@ArrBuffer,Adata.size);
     
    需要一个@符号
      

  2.   


    type 
      StrucA = Record 
        id     : integer; 
        nType  : Dword; 
        Content: Array   [0..64000]   of   char 
      end; procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream; 
        ABinding:   TIdSocketHandle); 
    var 
      RcvBuffer: StrucA; 
      ArrBuffer: Array [0..65000] of byte; 
    begin 
      Adata.ReadBuffer(RcvBuffer, AData.size); 
      if RcvBuffer.nType=2 then 
        Move(RcvBuffer, ArrBuffer, AData.size); 
    end; 
    Move(RcvBuffer, ArrBuffer, Adata.size);    
    这里的AData.Size的值是多少? 如果它是96的话, ArrBuffer只有最前面的96个字节被Move命令赋了值。