//转换为位图形式
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);
}
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);
}
是不是定义指针的移动?
hDib = DDBtoDIB(hBit);能出這兩個函數的定義與實現
用这种方式实现远程桌面控制的效率不高,这些暂且不谈
作为学习,提供些建议:
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)只是为了方便描述,至于怎样获取你的数据尺寸,相信不用我说了吧