图像网络程序设计报告屏幕监控软件

屏幕监控软件  时间:2021-04-14  阅读:()

局域网屏幕监控

下面是程序执行结果

程序中使用从 CSocket 继承来的 CTCPCl ientSocket 和CTCPServerSocket来相互通信。并由客户端使用OnStart( )建立连接通信地址选用回环地址127.0.0.1来进行测试如果要监控特定主机须输入该机ip地址void CScreenDlg::OnStart()

{cl ientsocket.Create();run =false;bool ret=clientsocket.Connect("127.0.0.1",1033); //连接到1033端口if (!ret)return;this->SetTimer(0,1000,NULL); //设置时间间隔是1秒

}

服务器端进行监听

BOOL CServerDlg::OnInitDialog()

{

CDialog::OnInitDialog();

//Add"About..."menu item to system menu.

//IDM_ABOUTBOX must be in thesystemcommand range.

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu =GetSystemMenu(FALSE);if (pSysMenu !=NULL)

{

CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty())

{pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}

}

//Setthe iconforthis dialog. Theframework doesthis automatical ly

SetIcon(m_hIcon,TRUE); //Set big icon

SetIcon(m_hIcon,FALSE); //Set smal l icon

//TODO:Add extra initialization herebool ret=false;serversoc ket.SetServerEvent(this);ret= serversocket.Create(1033); //打开1033端口ret= serversocket.Listen(); //进行监听return TRUE; //return TRUE unless you setthefocus to a control}

建立连接后服务器端使用GetScreen获取数据

并转换成2进制信息void CServerDlg::GetScreen()

{

CDC dc,bmpdc;int width,height;dc.CreateDC("DISPLAY",NULL,NULL,NULL);

CBitmap bm;width =GetSystemMetrics(SM_CXSCREEN);height=GetSystemMetrics(SM_CYSCREEN);

bm.CreateCompatibleBitmap(&dc,width,height);bmpdc.CreateCompatibleDC(&dc);bmpdc.SelectObject(&bm);bmpdc.BitBlt(0,0,width,height,&dc,0,0,SRCCOPY);bm.GetBitmap(&bitmap);size= bitmap.bmWidthBytes *bitmap.bmHeight;bmpdata= new char[size];

BITMAPIN FOHEADER bih;bih.biBitCount=bitmap.bmBitsPixel;bih.biClrImportant=0;bih.biClrUsed=0;bih.biCompression=0;bih.biHeight=bitmap.bmHeight;bih.biPlanes=1;bih.biSize=sizeof(BITMAPINFOHEADER);bih.biSizeImage=size;bih.biWidth=bitmap.bmWidth;bih.biXPelsPerMeter=0;bih.biYPelsPerMeter=0;

GetDIBits(dc,bm,0,bih.biHeight,bmpdata,(BITMAPINFO*)&bih,DIB_RGB_COLORS);}

发送图片数据:void CServerDlg::SendBitData(CSocket *socket)

{char*data=bmpdata;int sendlen=0;int len =0;do //发送图像数据

{sendlen = socket->Send(data,size);len += sendlen;data+= sendlen;

}while(len<size);delete bmpdata;bmpdata=NULL;size= 0;

}

发送图片结构void CServerDlg::SendBitmap(CSocket *socket)

{

GetScreen();socket->Send(&bitmap,sizeof(BITMAP));

}

客户端使用GetScreen( )来接送二进制数据void CScreenDlg::GetScreen()

{char*buffer= "M"; //获取图像结构信息cl ientsocket.Send(buffer,strlen(buffer));cl ientsocket.Receive(&bitmap,sizeof(BITMAP));size= bitmap.bmWidthBytes *bitmap.bmHeight;bmpdata= new char[size]; //处理图像的劢态数组char*data= bmpdata;int len,receivelen;len = receivelen =0;buffer="D"; //获取图像数据cl ientsocket.Send(buffer,strlen(buffer));do

{receivelen =clientsocket.Receive(data,size);len += receivelen;data+= receivelen;

}while(len<size);

DrawScreen();delete bmpdata;bmpdata=NULL;size= 0;

}

使DrawScreen( )来在窗口中绘制接收到的图形void CScreenDlg::DrawScreen()

{

CDC*dc=m_drawscreen.GetDC();

BITMAPIN FOHEADER bih;bih.biBitCount=bitmap.bmBitsPixel;bih.biClrImportant=0; //绘制图片相应参数bih.biClrUsed=0;bih.biCompression=0;bih.biHeight=bitmap.bmHeight;bih.biPlanes=1;bih.biSize=sizeof(BITMAPINFOHEADER);bih.biSizeImage=size;bih.biWidth=bitmap.bmWidth;bih.biXPelsPerMeter=0;bih.biYPelsPerMeter=0;

CBitmap bm;bm.CreateBitmapIndirect(&bitmap);

CDC bmpdc;bmpdc.CreateCompatibleDC(dc);

SetDIBits(bmpdc.m_hDC,bm,0,bitmap.bmHeight,bmpdata,(BITMAPINFO*)&bih,DIB_RGB_CO LO RS);bmpdc.SelectObject(&bm);

CRect rect;m_drawscreen.GetClientRect(&rect);dc->StretchBlt(0,0,rect.Width(),rect.Height(),&bmpdc,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);

}

当关闭窗口时会调用OnStopf来做处理void CScreenDlg::OnStop()

{this->Kil lTimer(0); //结束计时cl ientsocket.ShutDown(2);cl ientsocket.Close(); //关闭套接字

}

另外继承自CSocket的CTCPClentSocket和CTCPServerSocket分别定义了用亍接收的OnAccept( )用亍发送的OnRecieve( )用亍关闭套接字的

OnClose( ) 

OnAccept:void CTCPServerSocket::OnAccept(int nErrorCode){

CSocket::OnAccept(nErrorCode);cl ientsocket= new CTCPClientSocket(this);this->Accept(*clientsocket);

POSITION pos=ClientList.GetHeadPosition();Cl ientList.InsertBefore(pos,cl ientsocket);if (serverevent !=N ULL)cl ientsocket->SetClientEvent(serverevent);if (serverevent !=N ULL)serverevent->OnAccept(this,nErrorCode);}

OnRecieve:void CTCPClientSocket::OnReceive(int nErrorCode){

CSocket::OnReceive(nErrorCode);if (clientevent !=NULL)cl ientevent->OnReceive(this,nErrorCode);}

亚洲云-浙江高防BGP.提供自助防火墙高防各种offer高防BGP!

 亚洲云Asiayun怎么样?亚洲云Asiayun好不好?亚洲云成立于2021年,隶属于上海玥悠悠云计算有限公司(Yyyisp),是一家新国人IDC商家,且正规持证IDC/ISP/CDN,商家主要提供数据中心基础服务、互联网业务解决方案,及专属服务器租用、云服务器、云虚拟主机、专属服务器托管、带宽租用等产品和服务。Asiayun提供源自大陆、香港、韩国和美国等地骨干级机房优质资源,包括B...

BuyVM新设立的迈阿密机房速度怎么样?简单的测评速度性能

BuyVM商家算是一家比较老牌的海外主机商,公司设立在加拿大,曾经是低价便宜VPS主机的代表,目前为止有提供纽约、拉斯维加斯、卢森堡机房,以及新增加的美国迈阿密机房。如果我们有需要选择BuyVM商家的机器需要注意的是注册信息的时候一定要规范,否则很容易出现欺诈订单,甚至你开通后都有可能被禁止账户,也是这个原因,曾经被很多人吐槽的。这里我们简单的对于BuyVM商家新增加的迈阿密机房进行简单的测评。如...

搬瓦工(季付46.7美元)新增荷兰(联通线路)VPS,2.5-10Gbps

搬瓦工最近新增了荷兰机房中国联通(AS9929、AS4837)线路的VPS产品,选项为NL - China Unicom Amsterdam(ENUL_9),与日本软银和洛杉矶(DC06)CN2 GIA配置一致可以互换,属于高端系列,2.5Gbps-10Gbps大带宽,最低季付46.7美元起。搬瓦工VPS隶属于老牌IT7公司旗下,主要提供基于KVM架构VPS主机,数据中心包括美国洛杉矶、凤凰城、纽...

屏幕监控软件为你推荐
企业电子邮局求:什么是企业邮箱?(企业邮箱与普通个人邮箱的区别是什么?)支付宝调整还款日支付宝还款日期可以更改吗?的是cuteftp滴滴估值500亿滴滴拉屎 App 为何能估值 100 亿美金?是怎么计算出来的400电话查询能查出400电话是什么地区的吗欢迎光临本店宾馆欢迎语都有哪些? 越多越专业越好discuz教程急急急,求创建论坛网站【Discuz】最详细的教程!邮件管理系统邮件管理软件哪种最好?highlighter这双鞋的名字叫什么?空间导航自定义名称在空间里 给导航 改名字 怎么改
双线服务器租用 godaddy主机 php主机 便宜建站 老左博客 免费静态空间 一元域名 qq数据库下载 qingyun 有奖调查 域名转接 息壤代理 上海联通宽带测速 网页提速 linode支付宝 韩国代理ip 谷歌台湾 lamp兄弟连 电信主机托管 时间服务器 更多