/释放存储屏幕图象的Jpeg文件的内存流
procedure TfrmServer.FormDestroy(Sender: TObject);
begin
  jpegstream.free;
end;//发送抓取的屏幕图象(Jpeg格式)
procedure TfrmServer.sendScreen;
var
  sendsize: longint;
  Buf: array[0..BufSize - 1] of char;
begin
  if JpegStream.Size = 0 then
    snapscreen;
  if LeftSize > BufSize then
    SendSize := BufSize
  else
    SendSize := LeftSize;
  //将jpegStream内存流读取SendSize大小的数据到缓冲区
  jpegStream.ReadBuffer(Buf, sendSize);
  LeftSize := LeftSize - SendSize;
  //向客户端发送
  try
    serversocket.Socket.Connections[0].SendBuf(buf, sendsize);
    sleep(10);
  except
    jpegstream.Clear;
  end;
  if LeftSize = 0 then
    jpegStream.Clear;
end;//抓取本机屏幕,图象转换成Jpeg格式,并存到JpegStream内存流中。
procedure TfrmServer.snapScreen;
var
  bmpscreen: Tbitmap;
  jpegscreen: Tjpegimage;
  FullscreenCanvas: TCanvas;
  dc: HDC;
  sourceRect, destRect: TRect;
begin
  //得到屏幕设备
  dc := getdc(0);
  //创建画布句柄
  fullscreencanvas := Tcanvas.Create;
  fullscreencanvas.Handle := dc;
  //创建存储位图对象
  bmpscreen := Tbitmap.create;
  bmpscreen.Width := screen.Width;
  bmpscreen.Height := screen.Height;
  sourcerect := rect(0, 0, screen.Width, screen.Height);
  destrect := rect(0, 0, screen.Width, screen.Height);
  //将屏幕图象抓取到bmpScreen位图中
  bmpscreen.Canvas.CopyRect(sourcerect, fullscreenCanvas, destrect);
  //创建储存Jpeg格式的对象
  jpegscreen := Tjpegimage.Create;
  //将图象压缩成Jpeg格式,保存到JpegStream内存流中。
  jpegscreen.Assign(bmpscreen);
  jpegscreen.CompressionQuality := 10;
  jpegscreen.SaveToStream(jpegStream);
  jpegstream.Position := 0;
  LeftSize := jpegStream.Size;
  //释放创建的对象
  FullscreenCanvas.Free;
  bmpscreen.Free;
  jpegscreen.Free;
  ReleaseDC(0, DC);
end;
上面的程序在传输速度太漫了,我想客户端连接时第一幅图按上面的传完整的图片 第2幅图只传变动过的数据这样可以提高速度。但具体,本人不知道怎么写,不知哪位大虾能有写好的例子能给我 [email protected] 谢谢