//转换为位图形式
hBit = GetSrcBit(BitWidth,BitHeight);
hDib = DDBtoDIB(hBit);
DWORD bitSize = GlobalSize(hDib);

send(NewSock,(char*)&bitSize,sizeof(bitSize)+1,MSG_OOB);
recv(NewSock,(char*)&BitMsg,sizeof(BitMsg)+1,0);plmagePoint = (LPBYTE)hDib;//不理解?是什么意思?
for(WORD i=0;i<bitSize/US_MAXSIZE;i++)
{
  send(NewSock,(char*)plmagePoint,sizeof(BYTE)*US_MAXSIZE,MSG_OOB);
  //为什么每次循环为什么发plmagePoint?plmagePoint不是整个图象数据吗?  plmagePoint = plmagePoint + US_MAXSIZE;
  recv(NewSock,(char*)&BitMsg,sizeof(BitMsg)+1,0);
}
if (bitSize%US_MAXSIZE)
{
  send(NewSock,(char*)plmagePoint,sizeof(BYTE)*GlobalSize(hDib)%US_MAXSIZE,MSG_OOB);
  //为什么又是plmagePoint?  recv(NewSock,(char*)&BitMsg,sizeof(BitMsg)+1,0);
}

解决方案 »

  1.   

    US_MAXSIZE是发送数据的长度,在send里边限定了.
      

  2.   

    对,用US_MAXSIZE 这个来控制是哪段数据,和每次发送的大小
      

  3.   

    plmagePoint = (LPBYTE)hDib;//不理解?是什么意思?
      

  4.   

    plmagePoint = plmagePoint + US_MAXSIZE;
    是不是定义指针的移动?
      

  5.   

    将屏幕分成了N X N 的大小,然后分别传输,到客户端那边在组装成一个整屏显示。这样速度快,没有变化的区域就不用传了,这样节省网络带宽提高速度
      

  6.   

    hBit = GetSrcBit(BitWidth,BitHeight);
    hDib = DDBtoDIB(hBit);能出這兩個函數的定義與實現
      

  7.   

    还是基础的东西没明白
    用这种方式实现远程桌面控制的效率不高,这些暂且不谈
    作为学习,提供些建议:
    1. 如sunwinhn(修罗) 所说,那样可节省很多资源
    2. 数据要压缩,不然网络承受不了这种负担,要么效率奇低,互联网就更不用说了
    3. 看看Windows的mstsc的实现就你的问题:
    1. plmagePoint = (LPBYTE)hDib;//不理解?是什么意思?
    获得图像数据的起始地址,用于数据发送
    2. //为什么每次循环为什么发plmagePoint?plmagePoint不是整个图象数据吗?
    分包发送,每次发送的数据大小为US_MAXSIZE,即将pImagePoint分成sizeof(pImagePoint)/US_MAXSIZE份
    3. //为什么又是plmagePoint?
    sizeof(pImagePoint)/US_MAXSIZE并不一定能够整除,比方说sizeof(pImagePoint)=3050,而US_MAXSIZE=100,那在过程2中只发送30次,图像数据还剩下50B没有发送,此处就是将这最后的50B发送出去
    对方将所有数据都接收完毕后再按顺序组合还原成一张图片
    注意: 上述所用sizeof(pImagePoint)只是为了方便描述,至于怎样获取你的数据尺寸,相信不用我说了吧