我想请问一下,用TIdUDPClient如何传动态数组,当我用动态数组传值时,TIdUDPServer接收到后就不对,如果不用动态数组就很好.是不是不能传动态数组啊

解决方案 »

  1.   

    没问题的,在Indy10,发送过程参数就是动态数组
      

  2.   

    Indy9也没问题呀,把数组中的内容全部放在流中发送就可以了,我想你可能把数据存入流中时,弄错了
      

  3.   

    大概就是
    a:array of integer;
    FSendStream:TMemoryStream;setlength(a,2);
    a[0]:=1;
    a[1]:=2;FSendStream.Write(a,length(a));
    其中用:FSendStream.Write(a[0],length(a));FSendStream.Write(a,sizeof(a));都试过IdUDPClient1.SendBuffer(FSendStream.Memory^, FSendStream.Size);
    -------------------接收---------------------------------------------
    setlength(a,2);
    FSendStream.ReadBuffer(a,adata.size);基本上主要部分就这些
      

  4.   

    madyak(无天) 
    请问你能把你关于传动态数组的主要代码贴出来吗
      

  5.   

    你这样用试试
    发送
    FSendStream.Write(a[0],length(a)*SizeOf(Integer));
    收用
    FSendStream.ReadBuffer(a[0],length(a)*SizeOf(Integer));
      

  6.   

    madyak(无天) 说的方法是对的.
    FSendStream.Write(a[0],length(a)*sizeof(Integer));不过这样接收前,一定要为动态数组先分配空间.
    也就是先要setlength(a,2);
      

  7.   

    你注意一下读取和写入FSendStream时的FSendStream当前指针位置FSendStream.Position的值,
    你要是没有把握就写入和读取前将FSendStream.Position:=0;
      

  8.   

    是 FSendStream.Read(a[0],length(a)*sizeof(Integer));不是:
    是读出,NOt写入;FSendStream.Write(a[0],length(a)*sizeof(Integer));