位图打包问题

ahui535320611 2012-11-22 06:24:23
在截取屏幕位图时分别捕获屏幕位图结构和数据,即得到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;
...全文
176 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2012-12-15
  • 打赏
  • 举报
回复
其实就是制定通信协议的过程 比如你要发送的东西是123456789 包头要说明这是一个有9个数的包 然后给数据包编号 然后比如每个数据包只携带一个数据 那么就分成九个数据包发送 接收端按着协议将这些数据包组合 然后恢复出1213456789 不管要传送什么都是这个原理
l206xd 2012-12-15
  • 打赏
  • 举报
回复
我也没看懂版主的说明,我也比较想知道关于协议的使用。 协议是人规定了,但怎么用。。郁闷死。
ahui535320611 2012-12-14
  • 打赏
  • 举报
回复
引用 9 楼 xianglitian 的回复:
一样的 都是用结构体 你可以找些相关资料参考一下
你好 麻烦说的清楚一点好么 要不你有相关的资料么 我没找着关于打包的资料 谢谢
向立天 2012-12-13
  • 打赏
  • 举报
回复
一样的 都是用结构体 你可以找些相关资料参考一下
ahui535320611 2012-12-12
  • 打赏
  • 举报
回复
引用 4 楼 xianglitian 的回复:
对啊 这就是所谓协议么 这个是包头 整个数据包应该包含这个部分 当然也要有数据部分
你好 那对于下边这段程序 我是要将位图的结构与数据打包,前边的格式是跟题目上一样,对于位图的结构是BITMAP结构,而位图的数据过大,是要在while循环中发送的对于这种情况,位图的结构与数据怎么打包呢 CatchScrBmp(); //先捕获屏幕位图结构和数据,即得到m_bmpBit,和m_pBmpData //发送位图结构信息 int nSend = send(m_hSocket, (char *)&m_bmpBit, sizeof(m_bmpBit), 0); //发送位图数据信息 int nBytesSent = 0; int nBytesThisTime = 0; char *pch = m_pBmpData; int size = m_bmpBit.bmWidthBytes * m_bmpBit.bmHeight; do{ if(m_bEndVideo == true) //结束传送桌面画面线程 break;//发送大量的数据时 采用循环 直到发送完要发送的数据为止 nBytesThisTime = send(m_hSocket, pch, size - nBytesSent, 0); nBytesSent += nBytesThisTime; pch += nBytesThisTime; }while(nBytesSent < size);
ahui535320611 2012-12-12
  • 打赏
  • 举报
回复
引用 4 楼 xianglitian 的回复:
对啊 这就是所谓协议么 这个是包头 整个数据包应该包含这个部分 当然也要有数据部分
你好 CatchScrBmp(); //先捕获屏幕位图结构和数据,即得到m_bmpBit,和m_pBmpData //发送位图结构信息 int nSend = send(m_hSocket, (char *)&m_bmpBit, sizeof(m_bmpBit), 0); //发送位图数据信息 int nBytesSent = 0; int nBytesThisTime = 0; char *pch = m_pBmpData; int size = m_bmpBit.bmWidthBytes * m_bmpBit.bmHeight; do{ if(m_bEndVideo == true) //结束传送桌面画面线程 break;//发送大量的数据时 采用循环 直到发送完要发送的数据为止 nBytesThisTime = send(m_hSocket, pch, size - nBytesSent, 0); nBytesSent += nBytesThisTime; pch += nBytesThisTime; }while(nBytesSent < size);
ahui535320611 2012-11-26
  • 打赏
  • 举报
回复
引用 4 楼 xianglitian 的回复:
对啊 这就是所谓协议么 这个是包头 整个数据包应该包含这个部分 当然也要有数据部分
好的 谢谢 有疑问在请教你
向立天 2012-11-24
  • 打赏
  • 举报
回复
对啊 这就是所谓协议么 这个是包头 整个数据包应该包含这个部分 当然也要有数据部分
ahui535320611 2012-11-23
  • 打赏
  • 举报
回复
引用 2 楼 xianglitian 的回复:
做一个包头即可 比如 C/C++ code?12345struct{ LONG lType; //数据包类型 LONG lLen; //数据包长度}
怎么加到要发送的位图数据前呢 每次发送位图数据的时候就先发送这个包头结构?
向立天 2012-11-22
  • 打赏
  • 举报
回复
做一个包头即可 比如
struct
{
   LONG  lType; //数据包类型
   LONG  lLen;  //数据包长度
}
ahui535320611 2012-11-22
  • 打赏
  • 举报
回复
先自己顶顶 求助

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧