write() writeln()都是发送字符串
writestream()发送流,也是字符串
witeinteger()发送整数
~~~~~~我想发送数组,还有接收?请问该用哪个函数?

解决方案 »

  1.   

    其实这几个都一样
    数组就是字符串,在内存单元中的结构是一样的
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s: array [1..100] of byte;
      len: integer;
    begin
      fillchar(s, 100, 0);
      //数组付值
      IdTCPClient1.Socket.Send(s, len );
    end;
      

  2.   

    对。
    我用socket.send 发送 用 Socket.Recv()接收,可以收到数据。
    可问题是:
    为什么发送和接收到的不一致呢??
    我的发送端:
    procedure TForm1.BtnSendClick(Sender: TObject);
    var 
    sendarray: variant;
        
    begin
     
    with IdTCPClient do
    begin
    try fillchar(sendarray,10,0);
    sendarray:=varArrayCreate([0,9],varbyte);
    sendarray[0]:=byte($FF);
    sendarray[1]:=byte($FF);
    sendarray[2]:=byte($FF);
    sendarray[3]:=byte($FF);
    sendarray[4]:=byte($FF);
    sendarray[5]:=byte($FF);
    sendarray[6]:=byte($FF);
    sendarray[7]:=byte($FF);
    sendarray[8]:=byte($FF);
    sendarray[9]:=byte($FF);
     idtcpclient.Socket.Send(sendarray,10);
    end;
    end;
    我的接收端:
    procedure TForm1.IdTCPServerExecute(AThread: TIdPeerThread);
    var
    received: array[0..9] of byte;begin
    with AThread.Connection do
    begin
         AThread.Connection.Socket.Recv(received,10);
    end;
    end;不管发送数据是什么 接收到 17 32 * * * * * ,前两个字节是17 32 
    请问为什么?怎么改?
    非常感谢。
      

  3.   

    sendarray:=varArrayCreate([0,9],varbyte);
    sendarray[0]:=byte($FF);
    sendarray[1]:=byte($FF);
    sendarray[2]:=byte($FF);
    sendarray[3]:=byte($FF);
    sendarray[4]:=byte($FF);
    sendarray[5]:=byte($FF);
    sendarray[6]:=byte($FF);
    sendarray[7]:=byte($FF);
    sendarray[8]:=byte($FF);
    sendarray[9]:=byte($FF);
    既然都是Byte数据,为什么要创建变体数组?不管你传什么数据,字符串也好,常规数组也好,传递的都是一块内存,你不会不知道你所要传递的数据的内存起始地址和长度吧?
      

  4.   

    应该是数组的定义上的问题,后来不用变体,我改成
    Sendarray:array[0..9]of byte;
    用idtcpclient.writebuffer(sendarray,10);
    接收到的数据都正常了。
    接收的时候用的
    idtcpclient.readbuffer();
    idtcpclient.readbuffer(),要指明读取的数据的长度,可以读取长度再读取数据的,用的size:=idtcpclient.readfromstack(false,-1,false);
    算是可以结贴了,谢谢大家的鼓励。