首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

位图打包有关问题

2013-01-11 
位图打包问题在截取屏幕位图时分别捕获屏幕位图结构和数据,即得到m_bmpBit(BITMAP m_bmpBit //桌面位图结

位图打包问题
在截取屏幕位图时分别捕获屏幕位图结构和数据,即得到m_bmpBit(BITMAP m_bmpBit; //桌面位图结构)和m_pBmpData(char *m_pBmpData; //桌面位图数据), 想要将两者分别打包发送。由于我利用的同一个socket既发送位图数据,又发送字符数据,所以要利用打包里的控制信息在接收方来判断是那种信息,之后接收方做出相应的响应。
一下是发送字符数据时对字符数据进行打包的代码,如何能仿照这个格式给位图数据进行打包,以便于判断第一个long的类型。
        int nLength = m_strMsg.GetLength();
//设置本次数据发送的长度
const int nBufLen = nLength + sizeof(long) * 2;
char *pBuffer = new char[nBufLen];
memset(pBuffer, 0, nBufLen * sizeof(char));
//在缓冲区填写发送数据的类型
*(long*)pBuffer = MH_TYPE;
//在缓冲区填写发送数据的长度
*(long*)(pBuffer + sizeof(long)) = nLength;
char *pBufText = pBuffer + sizeof(long) * 2;
//将需要发送的信息复制到缓冲区
memcpy(pBufText, (const void*)m_strMsg.GetBuffer(0), nLength);
send(m_hSocket, (const char*)pBuffer, nBufLen, 0);
delete [] pBuffer;
[解决办法]
做一个包头即可
比如

struct
{
   LONG  lType; //数据包类型
   LONG  lLen;  //数据包长度
}

[解决办法]
其实就是制定通信协议的过程
比如你要发送的东西是123456789
包头要说明这是一个有9个数的包
然后给数据包编号
然后比如每个数据包只携带一个数据
那么就分成九个数据包发送
接收端按着协议将这些数据包组合
然后恢复出1213456789

不管要传送什么都是这个原理

热点排行