我使用TIdMappedPortTCP中的OnExecute事件想接受数据,可是Athread.NetData是一个String类型的,可是我要接受的数据有可能使用的是string不能显示的内容,是不是要使用Athread.Connection.InputBuffer.Read函数呢还是使用Athread.Connection.ReadBuffer函数呢???
我使用了Athread.Connection.InputBuffer.Read函数它的返回值应该是得到的数据长度,可是为什么它都是0呢????请高手帮助!!!

解决方案 »

  1.   

    OutboundClient/ConnectionAthread.Connection.ReadBuffer它收到是数据流
    将它放入一内存块中
    爱怎么处理都可以这控件有BUG
    如果你看了源码
    发现还不如自己实现Mapped/Proxy功能
      

  2.   

    我的代码是这样的!!
    var
      Data:String;
      PData:Pchar;
      PDataInt:Int64;
      CharArray:array [0..1023] of char;
    begin
      if Athread.Connection.Connected and Athread.OutboundClient.Connected then
      begin
        FillChar(CharArray,1024,#0);
        PDataInt:=Athread.Connection.InputBuffer.Size;
        Data:=Athread.Connection.InputBuffer.Extract(Athread.Connection.InputBuffer.Size);
        PDataInt:=Athread.Connection.InputBuffer.Size;
        Athread.Connection.ReadBuffer(CharArray,PDataInt);
        Application.MessageBox('asdf','asdf',MB_OK);
      end
      else
      begin
        Athread.Terminate;
      end;
    end;可是发现得到的总是不正确,为什么呢???
      

  3.   

    感觉你好像读了两边数据
     1   PDataInt:=Athread.Connection.InputBuffer.Size;
        Data:=Athread.Connection.InputBuffer.Extract(Athread.Connection.InputBuffer.Size);
      
    2   PDataInt:=Athread.Connection.InputBuffer.Size;
        Athread.Connection.ReadBuffer(CharArray,PDataInt);
    直接
    2   PDataInt:=Athread.Connection.InputBuffer.Size;
        Athread.Connection.ReadBuffer(CharArray[0],PDataInt);readbuffer必须把指针的第一个值传过去