远程截屏后的图片无法传送到本地

rkhw 2006-10-29 12:19:27
远程截获了服务器端的全屏幕之后得到一个BMP,现在服务器端想将这个BMP发送到客户端,传过来的BMP大小和尺寸都一致,但是内容是一片灰,没有远程屏幕图像。不知道是怎么回事。
代码如下(省略了accept部分,还有socket创建部分)

服务器端(发送):
CFile myFile;
myFile.Open("myScreen.bmp", CFile::modeRead | CFile::typeBinary);
int myFileLength = myFile.GetLength();

sockClient.Send(&myFileLength,32);
BYTE * data = new BYTE[myFileLength];
myFile.Read(data,myFileLength);
sockClient.Send(data, myFileLength);
myFile.Close();
delete data;
sockClient.Close();

客户端(接收):
int dataLength;
recSo.Receive(&dataLength,32);
BYTE * data = new BYTE[dataLength];
recSo.Receive(data,dataLength);
CFile destFile("myScreen111.bmp",CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
destFile.Write(data, dataLength);
destFile.Close();
delete data;
...全文
190 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rkhw 2006-10-29
  • 打赏
  • 举报
回复
有具体的代码吗
DentistryDoctor 2006-10-29
  • 打赏
  • 举报
回复
应该先写BITMAPINFOHEADER再写具体的bits.
ljux 2006-10-29
  • 打赏
  • 举报
回复
前面先得到BITMAP
//服务器端
end=sockClient.Send(&bmp,sizeof(bmp));
if(end==SOCKET_ERROR)
{
AfxMessageBox("Socket·¢ËÍʧ°Ü");
return -1;
}
//分块发送图像文件
for(int i =0;i<bmp.bmHeight;i++)
{
end=sockClient.Send(p+i*bmp.bmWidthBytes,bmp.bmWidthBytes);
if(end==SOCKET_ERROR)
{
AfxMessageBox("Socket·¢ËÍʧ°Ü");
return -1;
}
}

delete [] p;

客户端:
FILE *fp = fopen("myScreen.bmp", "wb");
if(fp)
{
BITMAP bmp;
int ret=recSo.Receive(&bmp,sizeof(bmp));
if(ret==0)
AfxMessageBox("¶ÁȡλͼÐÅÏ¢´íÎó");

p_bmp = bmp;

BITMAPINFOHEADER bih={0};
bih.biBitCount = bmp.bmBitsPixel;//ÿ¸öÏñËØ×Ö½Ú´óС
bih.biCompression = BI_RGB;
bih.biHeight = bmp.bmHeight;//¸ß¶È
bih.biWidth = bmp.bmWidth;//¿í¶È
bih.biPlanes = 1;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biSizeImage = bmp.bmWidthBytes * bmp.bmHeight;//ͼÏñÊý¾Ý´óС

p_bih = bih;

BITMAPFILEHEADER bfh={0};
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//µ½Î»Í¼Êý¾ÝµÄÆ«ÒÆÁ¿
bfh.bfSize = bfh.bfOffBits + bmp.bmWidthBytes * bmp.bmHeight;//Îļþ×ܵĴóС
bfh.bfType = (WORD)0x4d42;

p_bfh = bfh;

BYTE * p = new BYTE[bmp.bmWidthBytes * bmp.bmHeight];

//½ÓÊÕλͼÊý¾Ý,,ÖðÐнÓÊÕ
for(int i =0;i<bmp.bmHeight;i++)
{
ret=recSo.Receive(p+i*bmp.bmWidthBytes,bmp.bmWidthBytes);
if(ret==0)
AfxMessageBox("¶ÁȡλͼÊý¾Ý´íÎó");
}

fwrite(&bfh,1,sizeof(BITMAPFILEHEADER),fp);//дÈëλͼÎļþÍ·
fwrite(&bih,1,sizeof(BITMAPINFOHEADER),fp);//дÈëλͼÐÅϢͷ
fwrite(p,1,bih.biSizeImage,fp);//дÈëλͼÊý¾Ý

delete [] p;
AfxMessageBox("½ØÆÁ³É¹¦");
}
else
AfxMessageBox("¶ÁͼÏñÎļþʧ°Ü");

fclose(fp);
rkhw 2006-10-29
  • 打赏
  • 举报
回复
可能是传输大文件的问题,我已经把位图信息写入还不行。那个BMP有5M,我是一下子传输的。

18,356

社区成员

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

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