怎样实现socket传输内存流?高手请关注一下,最好带些源码!

解决方案 »

  1.   

    ???传送全部内存吗?
    如果不是只要将内存中的数据复制到一个缓冲中发送。
    也可以用TNMStrm控件来传送
      

  2.   

    我想用serversocket和clientsocket实现!
      

  3.   

    用COPYMEMORY复制内存,其他的都一样的。。
      

  4.   

    server端:var
      Form1: TForm1;
      m1:tmemorystream;
      sendhost:string;
    implementation
    ……
    procedure TForm1.undercontrolClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var 
    s,s1:string; 
    desk:tcanvas; 
    bitmap:tbitmap; 
    jpg:tjpegimage; begin
    s:=socket.ReceiveText;
    if s='gets' then 
    begin
    bitmap:=tbitmap.Create; 
    jpg:=tjpegimage.Create; 
    desk:=tcanvas.Create;  
    desk.Handle:=getdc(hwnd_desktop); 
    m1:=tmemorystream.Create; //初始化流m1,在用sendstream(m1)发送流后, 
    //它将保留到socket对话结束, 
    //不能用手工free掉,否则会触发异常 
    with bitmap do 
    begin 
    width:=screen.Width; 
    height:=screen.Height; 
    canvas.CopyRect(canvas.cliprect,desk,desk.cliprect); 
    end; 
    jpg.Assign(bitmap);  
    jpg.SaveToStream(m1);  
    jpg.free; 
    m1.Position:=0; 
    s1:=inttostr(m1.size); 
    Socket.sendtext(s1);  
    end; 
    if s='okok' then 
    begin 
    m1.Position:=0; 
    Socket.SendStream(m1); //发送JPG图象 
    end;