有关屏幕监控的问题,小弟毕业设计急用,求达人指教
我在做网络监控的毕业设计,最主要的功能屏幕监控遇到问题了
我服务器代码如下:
//抓取屏幕并发送到客户端
void CMonitorServerView::MonitorPanel(SOCKET socket)
{
char dot=new char[1024*768*4]; //1024*768*4
CBitmap bmp; //内存位图
CDC wdc; //设备环境
CDC *pDC; //指向桌面窗口的设备环境指针
static CWindowDC ddc(GetDesktopWindow()); //引用桌面窗口指针定义对象ddc
pDC=&ddc; //将指针pdc指向ddc
wdc.CreateCompatibleDC(pDC); //建立与ddc兼容的设备环境
bmp.CreateCompatibleBitmap(pDC,1024,768); //建立与ddc兼容的位图
wdc.SelectObject(&bmp); //选择bmp
wdc.BitBlt(0,0,1024,768,pDC,0,0,SRCCOPY); //把桌面图像复制到wdc的bmp中
bmp.GetBitmapBits(1024*768*4,(LPVOID)dot); //将图像信息从内存位图拷贝到缓存
int nSize=1024*768*4;
for (int i=0;i<nSize/US_MAXSIZE;i++) {
send(socket,dot,US_MAXSIZE,0);
dot=dot+US_MAXSIZE;
}
if (nSize%US_MAXSIZE) {
send(socket,dot,nSize%US_MAXSIZE,0);
}
wdc.DeleteDC();
bmp.DeleteObject();
// delete[] dot;
}
这个函数放在OnTimer事件中,定时发送到客户端,这个函数的问题是,我在此定义的char dot=new char[1024*768*4]; //1024*768*3
最后用delete[] dot;释放却老是出现运行错误,为什么无法正确释放啊?我的C++书上就是这么写的,怎么会错呢?
客户端代码如下:
void CMonitorClientView::OnNetEvent(WPARAM wParam, LPARAM lParam)
{
int iEvent=WSAGETSELECTEVENT(lParam);
char buffer[10000];
long iReadLen;
switch(iEvent) {
case FD_READ:
{
iReadLen=recv(ClientSock,buffer,10000,0); //从网络接收数据
buffer[iReadLen]=NULL;
for (int i=0;i<iReadLen;i++) {
dot[pointerss]=buffer[i];
pointerss++;
//判断接收到的信息是否已满一屏
if (pointerss==1024*768*4) {
CDC* pDC=GetWindowDC();//引用用户窗口指针定义对象pDC
CRect rect;
GetClientRect(&rect);
dot[1024*768*4]=NULL;
index++;
if(index==1)
{
wdc.CreateCompatibleDC(pDC); //建立与pDC兼容的device context
bmp.CreateCompatibleBitmap(pDC,1024,768);//建立与pDC兼容的位图
wdc.SelectObject(&bmp);
}
bmp.SetBitmapBits(1024*768*4,(LPVOID)dot); //把内存数据复制到bmp中
//把bmp中图像复制到用户窗口中
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&wdc,0,0,1024,768,SRCCOPY);
pointerss=0; //接收完一屏后指针复位,准备接收下一屏
UpdateWindow();
}
}
}
break;
default:
return;
}
}
这个函数用于在用户窗口显示屏幕
现在的问题是在客户端显示的杂乱的图象,特别是窗口一移动就出现混乱了,为什么啊?怎么样改进才能正确显示屏幕图象呢?
还有啊,这个程序在本机测试时可以显示图象,虽然很混乱,但是在两台机子上,客户端却什么都没有显示,为什么啊?
小弟毕业设计要交了,这个问题还没解决,急啊,求达人指教啊