网络程序设计报告屏幕监控软件.docx

上传人:b****5 文档编号:3432007 上传时间:2022-11-23 格式:DOCX 页数:41 大小:81.01KB
下载 相关 举报
网络程序设计报告屏幕监控软件.docx_第1页
第1页 / 共41页
网络程序设计报告屏幕监控软件.docx_第2页
第2页 / 共41页
网络程序设计报告屏幕监控软件.docx_第3页
第3页 / 共41页
网络程序设计报告屏幕监控软件.docx_第4页
第4页 / 共41页
网络程序设计报告屏幕监控软件.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

网络程序设计报告屏幕监控软件.docx

《网络程序设计报告屏幕监控软件.docx》由会员分享,可在线阅读,更多相关《网络程序设计报告屏幕监控软件.docx(41页珍藏版)》请在冰豆网上搜索。

网络程序设计报告屏幕监控软件.docx

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

局域网屏幕监控

下面是程序执行结果:

程序中使用从CSocket继承来的CTCPClientSocket和CTCPServerSocket来相互通信。

并由客户端使用OnStart()建立连接,通信地址选用回环地址127.0.0.1来进行测试,如果要监控特定主机,须输入该机ip地址:

voidCScreenDlg:

:

OnStart()

{

clientsocket.Create();

run=false;

boolret=clientsocket.Connect("127.0.0.1",1033);//连接到1033端口

if(!

ret)

return;

this->SetTimer(0,1000,NULL);//设置时间间隔是1秒

}

服务器端进行监听:

BOOLCServerDlg:

:

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

boolret=false;

serversocket.SetServerEvent(this);

ret=serversocket.Create(1033);//打开1033端口

ret=serversocket.Listen();//进行监听

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

 

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

并转换成2进制信息:

voidCServerDlg:

:

GetScreen()

{

CDCdc,bmpdc;

intwidth,height;

dc.CreateDC("DISPLAY",NULL,NULL,NULL);

CBitmapbm;

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=newchar[size];

BITMAPINFOHEADERbih;

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);

}

发送图片数据:

voidCServerDlg:

:

SendBitData(CSocket*socket)

{

char*data=bmpdata;

intsendlen=0;

intlen=0;

do//发送图像数据

{

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

len+=sendlen;

data+=sendlen;

}while(len

deletebmpdata;

bmpdata=NULL;

size=0;

}

发送图片结构:

voidCServerDlg:

:

SendBitmap(CSocket*socket)

{

GetScreen();

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

}

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

voidCScreenDlg:

:

GetScreen()

{

char*buffer="M";//获取图像结构信息

clientsocket.Send(buffer,strlen(buffer));

clientsocket.Receive(&bitmap,sizeof(BITMAP));

size=bitmap.bmWidthBytes*bitmap.bmHeight;

bmpdata=newchar[size];//处理图像的动态数组

char*data=bmpdata;

intlen,receivelen;

len=receivelen=0;

buffer="D";//获取图像数据

clientsocket.Send(buffer,strlen(buffer));

do

{

receivelen=clientsocket.Receive(data,size);

len+=receivelen;

data+=receivelen;

}while(len

DrawScreen();

deletebmpdata;

bmpdata=NULL;

size=0;

}

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

voidCScreenDlg:

:

DrawScreen()

{

CDC*dc=m_drawscreen.GetDC();

BITMAPINFOHEADERbih;

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;

CBitmapbm;

bm.CreateBitmapIndirect(&bitmap);

CDCbmpdc;

bmpdc.CreateCompatibleDC(dc);

SetDIBits(bmpdc.m_hDC,bm,0,bitmap.bmHeight,bmpdata,(BITMAPINFO*)&bih,DIB_RGB_COLORS);

bmpdc.SelectObject(&bm);

CRectrect;

m_drawscreen.GetClientRect(&rect);

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

}

当关闭窗口时会调用OnStopf来做处理:

voidCScreenDlg:

:

OnStop()

{

this->KillTimer(0);//结束计时

clientsocket.ShutDown

(2);

clientsocket.Close();//关闭套接字

}

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

OnAccept:

voidCTCPServerSocket:

:

OnAccept(intnErrorCode)

{

CSocket:

:

OnAccept(nErrorCode);

clientsocket=newCTCPClientSocket(this);

this->Accept(*clientsocket);

POSITIONpos=ClientList.GetHeadPosition();

ClientList.InsertBefore(pos,clientsocket);

if(serverevent!

=NULL)

clientsocket->SetClientEvent(serverevent);

if(serverevent!

=NULL)

serverevent->OnAccept(this,nErrorCode);

}

OnRecieve:

voidCTCPClientSocket:

:

OnReceive(intnErrorCode)

{

CSocket:

:

OnReceive(nErrorCode);

if(clientevent!

=NULL)

clientevent->OnReceive(this,nErrorCode);

}

OnClose:

voidCTCPClientSocket:

:

OnClose(intnErrorCode)

{

CSocket:

:

OnClose(nErrorCode);

if(clientevent!

=NULL)

clientevent->OnClose(this,nErrorCode);

POSITIONpos=

serversocket->ClientList.GetHeadPosition();

POSITIONoldpos;

while(pos!

=NULL)

{

oldpos=pos;

CTCPClientSocket*socket=

(CTCPClientSocket*)serversocket->ClientList.GetNext(pos);

if(socket!

=NULL)

serversocket->ClientList.RemoveAt(oldpos);

}

}

 

课程设计总结:

经过的了一周的学习和实践,加深了对网络程序设计的理解和应用。

理解和掌握了网络套接字的用法,使用规则。

在编程上拓宽了自己的思路,学会了一些灵活的方法,熟练了编程技巧。

这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。

在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。

对于如何参考文献有了更深的理解。

参考资料:

WINDOWS网络与通信设计王艳平

visualc++范例完全自学手册

 

附源代码:

Screen工程中:

Resourse.h

//{{NO_DEPENDENCIES}}

//MicrosoftDeveloperStudiogeneratedincludefile.

//UsedbyScreen.rc

//

#defineIDM_ABOUTBOXcreen0x0010

#defineIDD_ABOUTBOX100

#defineIDS_ABOUTBOX101

#defineIDD_SCREEN_DIALOG102

#defineIDR_MAINFRAME128

#defineIDC_BUTTON11000

#defineIDC_BUTTON21001

#defineIDC_DRAWSCREEN1002

//Nextdefaultvaluesfornewobjects

//

#ifdefAPSTUDIO_INVOKED

#ifndefAPSTUDIO_READONLY_SYMBOLS

#define_APS_NEXT_RESOURCE_VALUE131

#define_APS_NEXT_COMMAND_VALUE32771

#define_APS_NEXT_CONTROL_VALUE1003

#define_APS_NEXT_SYMED_VALUE101

#endif

#endif

 

Screen.h:

//Screen.h:

mainheaderfilefortheSCREENapplication

//

#if!

defined(AFX_SCREEN_H__1141ED47_1E96_4C04_B767_6555BE0E67B4__INCLUDED_)

#defineAFX_SCREEN_H__1141ED47_1E96_4C04_B767_6555BE0E67B4__INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

#ifndef__AFXWIN_H__

#errorinclude'stdafx.h'beforeincludingthisfileforPCH

#endif

#include"resource.h"//mainsymbols

/////////////////////////////////////////////////////////////////////////////

//CScreenApp:

//SeeScreen.cppfortheimplementationofthisclass

//

classCScreenApp:

publicCWinApp

{

public:

CScreenApp();

//Overrides

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CScreenApp)

public:

virtualBOOLInitInstance();

//}}AFX_VIRTUAL

//Implementation

//{{AFX_MSG(CScreenApp)

//NOTE-theClassWizardwilladdandremovememberfunctionshere.

//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

 

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}

//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.

#endif//!

defined(AFX_SCREEN_H__1141ED47_1E96_4C04_B767_6555BE0E67B4__INCLUDED_)

 

ScreenDlg.h:

//ScreenDlg.h:

headerfile

//

#include"TCPServer.h"

#if!

defined(AFX_SCREENDLG_H__9DB60DB4_6CA7_45EC_997B_1FC964D08D10__INCLUDED_)

#defineAFX_SCREENDLG_H__9DB60DB4_6CA7_45EC_997B_1FC964D08D10__INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

/////////////////////////////////////////////////////////////////////////////

//CScreenDlgdialog

classCScreenDlg:

publicCDialog

{

//Construction

protected:

boolrun;

BITMAPbitmap;

intsize;

char*bmpdata;

voidGetScreen();

voidDrawScreen();

public:

CTCPClientSocketclientsocket;

CScreenDlg(CWnd*pParent=NULL);//standardconstructor

//DialogData

//{{AFX_DATA(CScreenDlg)

enum{IDD=IDD_SCREEN_DIALOG};

CStaticm_drawscreen;

//}}AFX_DATA

//ClassWizardgeneratedvirtualfunctionoverrides

//{{AFX_VIRTUAL(CScreenDlg)

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport

//}}AFX_VIRTUAL

//Implementation

protected:

HICONm_hIcon;

//Generatedmessagemapfunctions

//{{AFX_MSG(CScreenDlg)

virtualBOOLOnInitDialog();

afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);

afx_msgvoidOnPaint();

afx_msgHCURSOROnQueryDragIcon();

afx_msgvoidOnStart();

afx_msgvoidOnSize(UINTnType,intcx,intcy);

afx_msgvoidOnTimer(UINTnIDEvent);

afx_msgvoidOnStop();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

//{{AFX_INSERT_LOCATION}}

//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.

#endif//!

defined(AFX_SCREENDLG_H__9DB60DB4_6CA7_45EC_997B_1FC964D08D10__INCLUDED_)

 

StdAfx.h:

//stdafx.h:

includefileforstandardsystemincludefiles,

//orprojectspecificincludefilesthatareusedfrequently,but

//arechangedinfrequently

//

#define_WIN32_WINNT0x0500

#if!

defined(AFX_STDAFX_H__19AD48ED_1769_499E_925D_EC594502C8AD__INCLUDED_)

#defineAFX_STDAFX_H__19AD48ED_1769_499E_925D_EC594502C8AD__INCLUDED_

#if_MSC_VER>1000

#pragmaonce

#endif//_MSC_VER>1000

#defineVC_EXTRALEAN//Excluderarely-usedstufffromWindowsheaders

#include//MFCcoreandstandardcomponents

#include//MFCextensions

#include//MFCAutomationclasses

#include//MFCsupportforInternetExplorer4CommonControls

#ifndef_AFX_NO_AFXCMN_SUPPORT

#include

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1