MO:TMemoryStream;
FBM:Tbitmap;
Str:string;FBM.SaveToStream(MO);
str:='id=123,name=tupian,';   //加前面?加后面?
IdTCPClient1.WriteStream(MO);以上是把一个图片的数据流用TCP包发出去,希望除了发送图片数据流以外,把'id=123,name=tupian,'这个内容和一起发送,然后TcpServer读的时候分别把id=123,name=tupian和图片数据流取出来
我用MOo.Read(Str,19);这样一读就出错了
正确的方法应该怎么组包拆包啊?

解决方案 »

  1.   

    你的代码并没有把'id=123,name=tupian,'这个内容发送出去。改成这样:str:='id=123,name=tupian,'; 
    MO.WriteBuffer(Str[1], Length(Str));
    FBM.SaveToStream(MO); 
    IdTCPClient1.WriteStream(MO); 
    或者:FBM.SaveToStream(MO); 
    str:='id=123,name=tupian,'; 
    IdTCPClient1.Write(str);
    IdTCPClient1.WriteStream(MO); 
      

  2.   

    str:='id=123,name=tupian,'; 
    MO.WriteBuffer(Str[1], Length(Str));
    FBM.SaveToStream(MO); 
    IdTCPClient1.WriteStream(MO); 用这个方法发送,接收的时候  ReMS:TMemoryStream;
      AThread.Connection.ReadStream(ReMS,-1,true);
      //数据接收完了
      ReMS.Position :=0;
      ReMS.Read(Str[1],19);
      ListBox1.Items.Add('str='+Str);//程序挂了原先尝过把把str放到MO的前面正着读,失败了。把str放到MO的后面,读最后的十几位,还是失败了
      

  3.   


    ReMS.Position := 0;
    SetLength(Str, 19);     //加上这一句
    ReMS.Read(Str[1],19);
    ListBox1.Items.Add('str='+Str);