我用indy10+D2007发送方执行
IdTCPClient1.Socket.Write(RawToBytes(memStream.Memory^,memStream.Size));
memStream里面的数据绝对正确,我做了验证的接收方
procedure TForm2.IdTCPServer1Execute(AContext: IdContext);
里面执行这一句
AContext.Connection.Socket.ReadStream(stream);
这里得到的stream.size始终=0,叫天天不应阿!

解决方案 »

  1.   

    IdTCPClient1.Socket.Write有专门发Stream的函数,另外是否Stream的Position置为0了。
      

  2.   

    给你做了个例子,你看一下procedure TForm1.Button1Click(Sender: TObject); //连接按钮
    begin
      IdTCPClient1.Host:='127.0.0.1';
      IdTCPClient1.Connect;
    end;procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
    begin
      Memo1.Lines.Add('有用户连接');
    end;procedure TForm1.Button2Click(Sender: TObject); //发送按钮
    var
      sm:TStringStream;
      msize:Integer;
    begin
      sm:=TStringStream.Create('大家好');
      msize:=sm.Size;
      Memo1.Lines.Add('发送时流大小为:'+inttostr(msize));
      IdTCPClient1.WriteInteger(msize);
      IdTCPClient1.WriteStream(sm);
      sm.Free;
    end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    var
      s:string;
      sm:TStringStream;
      msize:integer;
    begin
      sm:=TStringStream.Create('');
      msize:=AThread.Connection.ReadInteger();
      Memo1.Lines.Add('接收到的大小为:'+inttostr(msize));
      AThread.Connection.ReadStream(sm,msize);
      Memo1.Lines.Add(sm.DataString);
      sm.Free;
    end;
      

  3.   

    注意检查 Stream的Position是否回0,否则传出去的就不对了