局域网软件运行监控系统源程序vc++.docx
《局域网软件运行监控系统源程序vc++.docx》由会员分享,可在线阅读,更多相关《局域网软件运行监控系统源程序vc++.docx(19页珍藏版)》请在冰豆网上搜索。
![局域网软件运行监控系统源程序vc++.docx](https://file1.bdocx.com/fileroot1/2023-2/23/fe232731-f63d-42c5-8ee5-d899bd5e6df6/fe232731-f63d-42c5-8ee5-d899bd5e6df61.gif)
局域网软件运行监控系统源程序vc++
附录服务器端
ClientSock.cpp
voidCClientSock:
:
setdlg(CSreenServerDlg*d,intcid,intplen)
{dlg=d;
id=cid;
pklen=plen
//数据包长度为固定,处理比较方便,一般为1000到65000之间.
bufoffset=0;
pkbuf=newchar[plen*2];}
voidCClientSock:
:
OnReceive(intnErrorCode){
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
dlg->myRecvData(this);
CSocket:
:
OnReceive(nErrorCode);}
voidCClientSock:
:
GetPackage(char*buf)
//接收一个长度为pklen的完整数据包
{do{recvlen=Receive(pkbuf+bufoffset,pklen,0);
if(recvlen>0)
{bufoffset+=recvlen;}
}while(bufoffset//有可能(%1可能性)只接收到部分数据,就再接收一次
memcpy(buf,pkbuf,pklen);
bufoffset=bufoffset-pklen;
if(bufoffset>0)//有%99的可能性,bufoffset=0
memcpy(pkbuf,pkbuf+pklen,bufoffset);}
voidCClientSock:
:
SendCommandData(inttype,char*buf,intlen)
{NETPACKAGEpack;
pack.type=type;
pack.len=len;
memset(pack.buf,7,pklen-8);
memcpy(pack.buf,buf,len);
Send((char*)&pack,pklen,0);}
CSreenServerDlg.CPP
voidCSreenServerDlg:
:
OnTimer(UINTnIDEvent){
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
if(pclient!
=NULL){
CapSreen();
SentSreen(hBitmap,pclient);}
CDialog:
:
OnTimer(nIDEvent);}
voidCSreenServerDlg:
:
SentSreen(HBITMAPhBitmap,CClientSock*pc){
HDChDC=:
:
CreateDC("DISPLAY",NULL,NULL,NULL);
intiBits=:
:
GetDeviceCaps(hDC,BITSPIXEL)*:
:
GetDeviceCaps(hDC,PLANES);//当前分辨率下每个像素所占字节数
:
:
DeleteDC(hDC);
WORDwBitCount;//位图中每个像素所占字节数
if(iBits<=1)
wBitCount=1;
elseif(iBits<=4)
wBitCount=4;
elseif(iBits<=8)
wBitCount=8;
elseif(iBits<=24)
wBitCount=24;
else
wBitCount=iBits;
DWORDdwPaletteSize=0;//调色板大小,位图中像素字节大小
if(wBitCount<=8)
dwPaletteSize=(1<BITMAPbm;//位图属性结构
:
:
GetObject(hBitmap,sizeof(bm),(LPSTR)&bm);
BITMAPINFOHEADERbi,bi1;//位图信息头结构
bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=bm.bmWidth;
bi.biHeight=bm.bmHeight;
bi.biPlanes=1;
bi.biBitCount=wBitCount;
bi.biCompression=BI_RGB;//BI_RGB表示位图没有压缩
bi.biSizeImage=0;
bi.biXPelsPerMeter=0;
bi.biYPelsPerMeter=0;
bi.biClrUsed=0;
bi.biClrImportant=0;
bi1=bi;
bi1.biBitCount=24;
DWORDdwBmBitsSize=((bm.bmWidth*wBitCount+31)/32)*4*bm.bmHeight;
HANDLEhDib=:
:
GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));//为位图内容分配内存
LPBITMAPINFOHEADERlpbi=(LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi=bi;
HANDLEhPal=:
:
GetStockObject(DEFAULT_PALETTE);
//处理调色板
HANDLEhOldPal=NULL;
if(hPal){
hDC=:
:
GetDC(NULL);
hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FALSE);
RealizePalette(hDC);}
intnOutputBytes=0;
unsignedchar*m_pDibBits;
m_pDibBits=newunsignedchar[dwBmBitsSize];
:
:
GetDIBits(hDC,hBitmap,0,(UINT)bm.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize,(BITMAPINFO*)lpbi,DIB_RGB_COLORS);//获取该调色板下新的像素值
if(hOldPal)//恢复调色板
{SelectPalette(hDC,(HPALETTE)hOldPal,TRUE);
RealizePalette(hDC);
:
:
ReleaseDC(NULL,hDC);}
inti=0,j=0;
unsignedchar*pcolor;
pcolor=(unsignedchar*)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize;
//得到像素值
for(j=0;jif(j%4==3)
j++;
m_pDibBits[i]=pcolor[j];
i++;}
//////////////////////////发送图像头信息/////////////////////////////
CapSreenHeadercheader;
cheader.factlen=i;//图像长度
NETPACKAGEpack;
longfilestep=0;
longfileend=0;
longlFileSize=i;//图像长度
intend=0;intlen=0;
intdtlen=50000;//数据块长度
intplen=sizeof(NETPACKAGE);//数据包长度50008
filestep=lFileSize/dtlen;//数据块数
fileend=lFileSize%dtlen;//最后一块数据长度
cheader.filelength=lFileSize;////图像文件长度
cheader.blocklen=dtlen;//数据块长度
cheader.width=bm.bmWidth;//图像宽度
cheader.height=bm.bmHeight;//图像高度
pack.type=3;//图像头命令
pack.len=sizeof(cheader);//图像头信息长度
memset(pack.buf,7,dtlen);
memcpy(pack.buf,(char*)&cheader,pack.len);
pc->Send((unsignedchar*)&pack,plen,0);//发送图像头信息
Sleep(100);
////////////////////发送图像内容/////////////////
pack.type=4;//图像内容命令
pack.len=dtlen;//图像块长度
for(j=0;jmemcpy(pack.buf,&m_pDibBits[j*dtlen],dtlen);
pc->Send((unsignedchar*)&pack,plen,0);//发送图像信息}
pack.type=5;////最后一块数据命令
pack.len=fileend;//最后一块数据长度
memset(pack.buf,7,dtlen);
memcpy(pack.buf,&m_pDibBits[filestep*dtlen],fileend);
//发送最后一块数据
pc->Send((unsignedchar*)&pack,plen,0);//发送图像头信息
GlobalUnlock(hDib);//清除
GlobalFree(hDib);
delete[]m_pDibBits;}
voidCSreenServerDlg:
:
SendSreenToClient(){
if(pclient!
=NULL&&islogin==1)
{CapSreen();
SentSreen(hBitmap,pclient);}}
附录客户端
CsreenClientDlg.CPP
BOOLCSreenClientDlg:
:
OnInitDialog(){
CDialog:
:
OnInitDialog();
//Add"About..."menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);//Setbigicon
SetIcon(m_hIcon,FALSE);//Setsmallicon
//TODO:
Addextrainitializationhere
pclient=NULL;//定义一个socket类型的借口指针
m_ip="127.0.0.1";//初始化默认ip为本机
m_port=3009;//初始化端口为3009
m_usrpwd="123";
m_usrname="aaa";
UpdateData(FALSE);
//将控件关联变量的值传递给控件并改变控件的状态
m_pBIH=NULL;//位图头
m_pDibBits=NULL;//接收图像数据偏移
m_pDib=NULL;
pklen=sizeof(NETPACKAGE);//获取数据包的程度
lbitsOffset=0;
capflag=0;
bcontrol=0;
initDrawParam();
returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}
voidCSreenClientDlg:
:
OnButtonGetcap()
{//TODO:
Addyourcontrolnotificationhandlercodehere
if(pclient!
=NULL)
pclient->SendCommandData(3,(char*)&usrinfo,sizeof(USERINFO));}
voidCSreenClientDlg:
:
OnButtonSavebmp()//保存bmp图片
{//TODO:
Addyourcontrolnotificationhandlercodehere
charszFilter[]="Allfiles(*.*)|*.*|bmpfiles(*.bmp)|*.bmp||";
CFileDialogfd(false,"bmp","aaa",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,NULL);
if(IDOK==fd.DoModal())
{m_filename=fd.GetPathName();
CapSreen();
WriteBmpToFile(hBitmap,m_filename);
UpdateData(FALSE);}}
voidCSreenClientDlg:
:
WriteBmpToFile(HBITMAPhBitmap,CStringstrFileName)
{HDChDC=:
:
CreateDC("DISPLAY",NULL,NULL,NULL);
intiBits=:
:
GetDeviceCaps(hDC,BITSPIXEL)*:
:
GetDeviceCaps(hDC,PLANES);//当前分辨率下每个像素所占字节数
:
:
DeleteDC(hDC);
WORDwBitCount;//位图中每个像素所占字节数
if(iBits<=1)
wBitCount=1;
elseif(iBits<=4)
wBitCount=4;
elseif(iBits<=8)
wBitCount=8;
elseif(iBits<=24)
wBitCount=24;
else
wBitCount=iBits;
DWORDdwPaletteSize=0;//调色板大小,位图中像素字节大小
if(wBitCount<=8)
dwPaletteSize=(1<BITMAPbm;//位图属性结构
:
:
GetObject(hBitmap,sizeof(bm),(LPSTR)&bm);
BITMAPINFOHEADERbi,bi1;//位图信息头结构
bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=bm.bmWidth;
bi.biHeight=bm.bmHeight;
bi.biPlanes=1;
bi.biBitCount=wBitCount;
bi.biCompression=BI_RGB;//BI_RGB表示位图没有压缩
bi.biSizeImage=0;
bi.biXPelsPerMeter=0;
bi.biYPelsPerMeter=0;
bi.biClrUsed=0;
bi.biClrImportant=0;
bi1=bi;
bi1.biBitCount=24;
DWORDdwBmBitsSize=((bm.bmWidth*wBitCount+31)/32)*4*bm.bmHeight;
HANDLEhDib=:
:
GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));//为位图内容分配内存
LPBITMAPINFOHEADERlpbi=(LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi=bi;
HANDLEhPal=:
:
GetStockObject(DEFAULT_PALETTE);//处理调色板
HANDLEhOldPal=NULL;
if(hPal)
{hDC=:
:
GetDC(NULL);
hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FALSE);
RealizePalette(hDC);}
intnOutputBytes=0;
:
:
GetDIBits(hDC,hBitmap,0,(UINT)bm.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize,(BITMAPINFO*)lpbi,DIB_RGB_COLORS);//获取该调色板下新的像素值
if(hOldPal)//恢复调色板
{SelectPalette(hDC,(HPALETTE)hOldPal,TRUE);
RealizePalette(hDC);
:
:
ReleaseDC(NULL,hDC);}
BITMAPFILEHEADERbmfHdr;//位图文件头结构
bmfHdr.bfType=0x4D42;//"BM"//设置位图文件头
DWORDdwDIBSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize;
bmfHdr.bfSize=dwDIBSize;
bmfHdr.bfReserved1=0;
bmfHdr.bfReserved2=0;
bmfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwPaletteSize;
HANDLEhFile=CreateFile(strFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);//创建位图文件
DWORDdwWritten;
WriteFile(hFile,(LPSTR)&bmfHdr,sizeof(BITMAPFILEHEADER),&dwWritten,NULL);//写入位图文件头
WriteFile(hFile,(LPSTR)lpbi,dwDIBSize,&dwWritten,NULL);//写入位图文件其余内容
GlobalUnlock(hDib);//清除
GlobalFree(hDib);
CloseHandle(hFile);}
voidCSreenClientDlg:
:
initDrawSreen()//初始化屏幕
{m_width=m_pBIH->biWidth;
m_height=m_pBIH->biHeight;
scrylm=m_height-cheight;
if(scrylm<0)
scrylm=0;
scrxlm=m_width-cwidth;
if(scrxlm<0)
scrxlm=0;
AfxMessageBox(_T("initDrawSreen"));
m_vbar.SetScrollRange(0,scrylm,FALSE);//0制定最小滚动的位置scrylm制定最大滚动的位置TRUE
m_vbar.SetScrollPos(scry,TRUE);
m_hbar.SetScrollRange(0,scrxlm,TRUE);
m_hbar.SetScrollPos(scrx,TRUE);
UpdateData(FALSE);
capflag=1;
drawSreen();}
voidCSreenClientDlg:
:
OnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)
{//TODO:
Addyourmessagehandlercodehereand/orcalldefault
intnPos1=m_vbar.GetScrollPos();
if(nSBCode==SB_LINEDOWN)
{scry=scry+10;
if(scry>scrylm)
scry=scrylm;
nPos1=scry;
drawSreen();}
if(nSBCode==SB_LINEUP)
{scry=scry-10;
if(scry<0)
scry=0;
nPos1=scry;
drawSreen();}
if(nSBCode==SB_THUMBTRACK)
{scry=nPos;
nPos1=nPos;
if(nPo