如何读取未知数据长度的数据.
客户端数据格式未定,所以不知它发送的数据长度,也不能确定结束字符.
AThread.Connection.ReadStream是否可用?怎么用?为什么我用了会报错?
如果Indy控件不行,是否还有别的控件可用?还是得自已写一个?var
  Strm : TStringStream;
begin
  Strm := TStringStream.Create('');
  AThread.Connection.ReadStream(Strm);//这里报错.Out of Memory
  //客户端数据发完后不会Disconnect;
  ....多谢!

解决方案 »

  1.   

    试一下,好象文件流有这个属性strm.size,可以得到要接收包的大小的,
      

  2.   

    可是,ReadStream会报错呀
    帮帮忙,兄弟们
      

  3.   

    with AThread.Connection do
    begin
    AStream := TStringStream.Create(SOutline);
    AThread.Connection.OpenWriteBuffer;
    WriteStream(AStream);
    CloseWriteBuffer;
    AStream.Free;
    end;
    Indy的Demo代码
      

  4.   

    楼上这位老兄,你的代码是发数据的过程.而我想要读数据.
    Indy的Demo我看过了,它的发送端发完数据后会断开连接(所以接收端能一直读到发送端断开),而我的发送端发完数据后不会断开.
    不过,还是谢谢你!
      

  5.   

    WriteStream()有四个参数,第一个参数为数据流,第二个参数为boolean型,true代表从流的开始位置开始传输,而false代表从流的当前位置传输,默认为true。第三个参数也是boolean型,true代表标出传输的流的大小,而false为否。第四个参数为流的字节数大小。而ReadStream()有三个参数,第一个为数据流,第二个为数据大小,-1代表全部。第三个参数true表示只有在客户端disconnect后才能接到数据,而false表示客户端不必断开就可以接收到数据。你的问题就在这。可以有以下两种解决方法:
    1:
    客户端:
                 
    try
    begin
       OpenWriteBuffer;
       WriteStream(OutputStream);
       CloseWriteBuffer;
    finally
      disconnect;
    end;服务端:
      ReadStream(InputStream,-1,true);2:
    客户端:
       OpenWriteBuffer;
       WriteStream(OutputStream,true,true,outputstream.size);
       CloseWriteBuffer;服务端:
      ReadStream(InputStream,athread.connection.readinteger,false);
    其中athread.connection.readinteger存的是流的字节数大小。这样你就可参接到数据了。
      

  6.   

    sData:=Athread.Connection.CurrentReadBuffer;
    可以读出本次接收到的数据
      

  7.   

    Size :=AThread.Connection.ReadFromStack;    或
    AThread.Connection.ReadFromStack;
    Size := AThread.Connection.InputBuffer.Size;
      

  8.   

    我遇到类似问题的时候,长数据的读写用的是writeBuffer和readBuffer,事先最好在发送端取得数据长度,通知接收端