我用winsock 写了一个远程抓屏的小程序,为什么他传过来的屏幕有时组合的又错误,和源屏幕不一样呢???

解决方案 »

  1.   

    我的主要代码是
    客户端
              buff=new char[SENDBLOCK]; if (ScreenInfo.dwSize %SENDBLOCK)
    {
    len = recv(sktClient,buff,ScreenInfo.dwSize%SENDBLOCK,0);
    CopyMemory(p2,buff,len);
    p2 = p2 + ScreenInfo.dwSize%SENDBLOCK;
    }
    p2 = p2 - ScreenInfo.dwSize;
    closesocket(sktClient);
    //显示
    HWND hWnd;
    RECT rect;
    HDC dc;
    hWnd=GetSafeHwnd ();
    ::GetClientRect(hWnd,&rect);
    dc=::GetDC (hWnd);
    // Define Colors
    int color = (1<<((LPBITMAPINFOHEADER)p2)->biBitCount);
    if(color>256)
    color = 0; // Draw Bit to Window Dc
    StretchDIBits(dc, 0,0, rect.right,rect.bottom,0,0,
    ((LPBITMAPINFOHEADER)p)->biWidth, 
    ((LPBITMAPINFOHEADER)p)->biHeight,
    (LPBYTE)p+(sizeof(BITMAPINFOHEADER)+color*sizeof(RGBQUAD)),
    (LPBITMAPINFO)p,DIB_RGB_COLORS, SRCCOPY);
      

  2.   

    to shilong
    那我因该怎样让它同步呢?谢谢你能帮我说清楚一点吗?把主要代码写给我好吗?谢谢!!!!
      

  3.   

    int recbytes = 0 ;
    int timeout = 0 ;
    int count = 你要接受到阿大小
                      char buffer[大小] ; while ( timeout < 10 && recbytes < count )
    {
    int ret =recv( buffer+ recbytes , count - recbytes , 0 ) ;
    if ( ret < 0 )
    {
    ret = 0 ;
    }
    recbytes += ret ;
    if ( recbytes == count )
    {
    break ;
    }
    timeout ++ ;
    Sleep( 20 ) ;
    } // while ( timeout < 10 && recbytes < count ){
    if ( timeout >= 10 )
    {
    } // if ( timeout >= 10 ){