我现在想将TmemoryStream按包传输。
ms := TmemoryStream.Create;
Jpg := Tjpegimage.Create;
Jpg.Assign(Image1.Picture.Graphic);
Jpg.SaveToStream(Ms);
Ms.Position := 0;
-- arraybye :array of byte;
将TMemoryStream 每64个字节读入到一个byte,如果这些byte是按包传输的,那么怎样用一个array of byte 接收所有发出的byte.

解决方案 »

  1.   

    按64字节分可以用下面的方法
     Ms.Position := 0;
     while Ms.Size- Ms.Position>=64 do
      begin
         Ms.ReadBuffer(arraybye[0], 64);
         Ms.Position:=Ms.Position+64;
         //发送
      end;
     //如果最后有没有发出的数据,把尾巴发送出去,最后的可能不够64字节,你需要处理,可重设置数组的长度UPD发送可能要快些,但存在丢包和乱序的情况
    如果对速度要求不是很严格,可用TCP发送接收端可以用内存流接收,如果非要数组接收,最好一开始能把数据的总长度传过去如果工程存在大量不同种类的通读的情况,你可以考虑用结构(Record)来封装包,这样可以很方便的加入附加的信息
      

  2.   

    thk,madyak(无天) ( ) 信誉:120 .
    因为我对网络传输比较陌生,而且,现在是用串口(mscomm),所以在接收时比较麻烦,