我想通过IdTCPClient读取从服务器发来的TCP/IP消息包,消息包长度为XML报文长度,规定每次接收时,先接收4个字节的长度,再按长度接收其后消息,我不大懂,请问是用数组的格式来接收吗,
像下面这样吗,如何分两次接收
IdTCPClient1.ReadLn('', 5);

解决方案 »

  1.   

    Length : integer;
    IdTCPClient1.ReadBuffer(Length , 4);
    IdTCPClient1.ReadBuffer(Data, Length);
      

  2.   

    cjf1009(农民程序员):
    长度值用16进制字符(0-F)表示的4位整数来表示,
    是不是还要做什么转换
      

  3.   

    发送跟接收的数据定义一样了就可以了。
    因为SizeOf(数据)是integer,所以要转成integer来接收后面的数据
      

  4.   

    参照
    http://community.csdn.net/Expert/topic/3859/3859478.xml?temp=.5940515
    我写的发送代码,接收可以这样
    发送用:
        IdTCPClient1.WriteInteger(iValue);
        IdTCPClient1.WriteLn(edMessage.Text);
    对应:
        IdTcpClient.ReadInteger;
        IdTcpClient.ReadLn;
    /////////////////////////////////////////////////////
    发送用:
        IdTcpClient.WriteBuffer
    对应:
        Length:integer;
        Data:Array of char;
        IdTcpClient.ReadBuffer(Length,4);
        SetLength(Data,Length);
        IdTcpClient.ReadBuffer(Data,Length);
      

  5.   

    recv( RECV_SEND , revbuf , 接收空间 , 0 );