大家好,我采用TIdTCPClient 接受服务端报文时候,如果长度大于8k左右,会接受不全,
请问这个是不是indy组件的限制,请问如何解决这个限制。谢谢。

解决方案 »

  1.   

    可以用ReadBuffer或ReadStream试试
      

  2.   

    谢谢楼上:我的代码是这样的?
    麻烦看看是否有问题:
    通信:
        //(3)接收
          try
              retstr := '';
              //得到需要得到的数据包长度
              retstr := CurrentReadBuffer;
              mRevLen := StrToInt(trim(copy(retstr,2,6)));
              retstr := Copy(retStr,8,Length(retstr));
              //循环等待,知道获取到相应的数据包
              fillchar(mRecvBuf,sizeof(mRecvBuf),#0);
              while True do
              begin
                 if Length(retstr)>=mRevLen then
                   break;
                 //读取相应的返回值
                 ReadBuffer(mRecvBuf,mRevLen);
                 retstr :=mRecvBuf;
              end;
              retxml := retstr;
          except on E:Exception do
            begin
               errormsg := '与CS通讯读数据出错,原因为:'+E.Message;
               Result := false;
               Exit;
            end;
          end;
        end; //end with IdTCPClient
      

  3.   

    CurrentReadBuffer 是不是能够一次性从协议堆栈中吧报文读到缓冲区中?
    我现在问题是超过8k 显示的报文是不全的,如果循环读的话具体该怎么处理呢?
      

  4.   

    没怎么用INDY,你下载demo看看吧