我用 IdUDPServer 和IdUDPClient 进行图象的传输! 发送:    bufferSize:=8192;
    ......
    vStream.Position:=0;
    SendCount:=Floor(vStream.Size div 8192);
    try
        for i:=1 to SendCount do
        begin
           if i<> 1 then
              vStream.Position:=(i-1)*8192 + 1
           else
             VStream.Position:=0;
           SendStream.CopyFrom(vStream,8192);
           idUDPClient1.SendBuffer(GStack.LocalAddresses.Strings [0],8090,SendStream,8192);
           sendStream.Clear;
        end;
        if vStream.Size > sendCount*8192 then
        begin
           vStream.Position:=(vStream.Size-SendCount*8192)+1;
           SendStream.CopyFrom(vStream,(vStream.Size-SendCount*8192));
           idUDPClient1.SendBuffer(GStack.LocalAddresses.Strings[0],8090,SendStream,SendStream.Size);
        end;
    Finally
        SendStream.Free;
        vStream.Free;
    end;接收:
    tempStream.CopyFrom(AData,AData.Size);
    tempStream.Position:=0;
    if tempStream.Size =8192 then
       imgStream.Write(tempStream,tempStream.Size)
    else if (tempStream.Size > 0) and (tempStream.Size < 8192) then
    begin
       imgStream.WriteBuffer(tempStream,tempStream.Size);
       imgStream.Position:=0;
       imgDest.Picture.Bitmap.LoadFromStream(imgStream);
    end;
    tempStream.Free

解决方案 »

  1.   

    我的接收程序:procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;ABinding: TIdSocketHandle);
    var
     m:tmemorystream;
     b:tbitmap;
     j:tjpegimage;
     i:integer;
    begin
       m:=tmemorystream.create;
       m.copyfrom(adata,adata.size);
       m.Position:=0;j:=tjpegimage.Create;
    j.LoadFromStream(m);      //将流M中的数据读至JPG图像对象J中Image1.Picture.Assign(j); //分配给image1j.free;
    m.Free;
    end;你试试。另外不要判断8192,你可以在控件上设置其缓冲区为10万。
      

  2.   

    发送:
    vStream:=TMemoryStream.Create;
    imgSource.Picture.Bitmap.SaveToStream(vStream);
    vStream.Position:=0;
    idUDPClient1.SendBuffer(GStack.LocalAddresses.Strings[0],8090,vStream,vStream.Size);接收:
    tempStream:=TMemoryStream.Create;
    bmps:=TBitmap.Create;
    tempStream.CopyFrom(AData,AData.Size);
    tempStream.Position:=0;
    bmps.LoadFromStream(tempstream);   到这句就出错. 图象是bmp.
    imgDest.Picture.Bitmap.Assign(bmps);
    imgDest.Hint:=IntToStr(tempstream.size);
       
    出错信息是:bitmap image is not valid
    我测试了源流和目标流.大小相等.还有但图象为800*600的bmp图象时就出错:socket Error # 10014 Bad Address
      

  3.   

    我也在研究,我发现UDPCLIENT送出的字节内容与udpserver接受的字节内容不同,但字节数相等
      

  4.   

    我用idtcpclient和idtcpserver传送成功
    发送端:
    procedure TForm1.Button1Click(Sender: TObject);
    var s : tfilestream ;
        d : integer ;
    begin
      s := tfilestream.Create('e:\唐成.jpg',fmopenread);
      s.Position := 0 ;
      idtcpclient1.Connect ;
      idtcpclient1.WriteStream(s,true,false,s.size);
      idtcpclient1.Disconnect ;
    end;接受端:
    procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
    var s : tmemorystream ;
        a : integer ;
        c : char ;
        d : integer ;
        j : tjpegimage ;
    begin
      s := tmemorystream.Create ;
      athread.Connection.readstream(s,-1,true) ;
      s.Position := 0 ;  j := tjpegimage.Create ;
      j.LoadFromStream(s);  image1.Picture.Assign(j);
      j.Free ;
      s.Free ;
    end;
      

  5.   

    我想要idUDP的例子.哪位好人能给我一份  [email protected]