基于VC++的局域网内主机监控系统设计与实现

article/2025/9/10 21:39:25

局域网内主机监控系统

目录

  1. 引言 2
    1.1 编写目的 2
    1.2 项目背景 2
    1.3 课题内容和要求 3
    1.4 名词解释 4
    参考文献 4
  2. 需求分析 5
    2.1 现有系统概述 5
    2.2 对新系统的要求 5
    2.3 系统要求 6
    2.4 对功能的规定 6
    2.5 对性能的规定 6
    2.6 运行环境规定 7
    2.6.2 软件配置 7
  3. 系统架构 7
    3.1 系统拓扑结构 7
    3.2 系统工作过程 8
    3.3 系统框架 9
  4. 系统概要设计 10
    4.1 系统概貌 10
    4.2 主要功能模块描述 11
    4.3 基本设计概念和处理流程 12
    4.4 系统活动流程描述 12
    4.4 主要模块概要设计 13
    4.4.1 Socket 概要设计 14
    4.4.2 多线程概要设计 17
    4.5 图形界面设计 17
    4.6 系统出错处理设计 19
    4.3.2 补救措施 19
  5. 系统详细设计 19
    5.1 主要常量定义 20
    5.2 主要模块实现 20
    5.2.2 连接的建立与取消 21
    5.2.3 Socket 的设计与实现 22
    5.2.4 多线程的建立与实现 24
    5.4 图形界面设计及实现 24
    5.4.1 窗口类 CWnd 24
    5.4.2 下拉层叠式菜单的实现 25
    5.4.3 工具栏的实现 25
    5.4.4 状态栏的实现 27
  6. 系统的运行和测试 27
    6.1 运行环境说明 27
    6.2 运行和测试 28
    6.2.1 系统主界面展示 28
    6.2.2 连接菜单展示以及连接建立测试 29
    6.2.3 色彩选择测试 32
    6.2.4 图像压缩选择测试 34
    6.2.5 控制对方桌面测试 35
    6.2.6 “显示”菜单展示以及包含功能测试 37
    6.2.7 “帮助”菜单展示 40
    6.3 结论 41
  7. 调试过程中的问题 41
    7.1 Socket 创建失败 41
    7.2 内存溢出 42
    7.3 Socket 数据传输错误 42
    7.4 多线程弹出对话框错误 42
    7.5 位图显示错误 43
    7.6 子窗口建立崩溃 44
    7.7 未解决的问题: 44
  8. 课程设计总结 45
    8.1 总结 45
    8.2 展望 46
    致 谢 46
    附 录 47
    Ⅰ 参考书目和网页 47
    Ⅱ ReadMe 文件展示 47
    2.需求分析

2.1现有系统概述
在此次开发之前,我们拥有一个原型系统,仅可实现远程监控功能,无图形界面。这会给用户带来几个问题:①只监控会不方便用户使用,无法实现控制功能也未满足远程控制系统的需求;②监控是通过将对方电脑屏幕截屏然后进行图像传输实现的,图像不进行压缩导致传输过程慢、卡顿明显,用户体验不佳;③ 原先并没有考虑用户实际的机器性能问题,全部以 256 色图像传输,这在用户机器性能不佳的情况下更加重了传输复旦;④一次只能监控一个电脑,但这并不符合实际的用户需求,我们的目标客户为企业的管理者,需要一次监控多台电脑以达到高校的办公需求;⑤无信息发送与文件传输功能,这导致监控端与被监控端交互困难,不利于提高企业工作效率;⑥无图形界面设计,给用户使用带来不便。因此现有系统将针对以上几点,采用“原型法”的开发方法进行改善。
2.2对新系统的要求
根据 2.1 节对现有系统的描述,我们可以清晰的知道现有系统目前的缺陷。因此我们针对以上缺陷,采用“原型法”的开发方法对新系统增加如下功能:① 实现远程控制功能,包括被监控端的鼠标、键盘以及外部设备接口等;②采用不同的压缩算法,供用户根据实际情况选择;③提供 1、4、8、24 位色彩显示方案, 供用户根据实际情况以及个人喜好选择;④可同时监控、控制多台电脑;⑤增加消息传输、命令传输以及文件传输功能;⑥增加友好的图形界面,改善客户体验、方便客户使用。

2.3系统要求
使用远程控制软件进行远程控制,首先要使客户端和服务器端都处在网络中, 网络可以是局域网。其次要使被控端和控制端都处在同一种通信协议之下,一般TCP/IP 协议是多数远程控制软件首选的通讯协议。通过远程控制软件控制的双方电脑需要拥有合法的 IP 地址,而且客户端必须要明确知道服务器端的 IP 地址。为企业设计一个远程控制系统需要满足以下条件:
稳定性:监控系统在企业现代化的管理过程中占据了重要的地位,需要具有一定的稳定性以实现便捷的管理;
易维护性:一个系统的易维护性是系统的一项非常重要的指标,因此系统应易维护以降低企业的运营成本;
安全性:企业的信息数据属于企业机密,因此安全、保密工作是必须第一位考虑。然而数据在网络中传输的过程,因此为防止信息被窃听或截获,必须将数据加密。
易操作性:见解美观易操作的界面对提高企业员工的工作效率至关重要。
2.4对功能的规定
本系统主要实现的功能有:
监控、控制多台主机的桌面;
实现远程控制功能,包括被监控端的鼠标、键盘以及外部设备接口等;
提供 1、4、8、24 位色彩显示方案,供用户根据实际情况以及个人喜好选择;
采用不同的压缩算法实现对图像的压缩,供用户根据实际情况选择;
消息传输、命令传输以及文件传输功能,实现监控端与被监控端的交互;
图形界面开发,改善客户体验、提高工作效率。
2.5对性能的规定
用户界面需要简单,友好,方便操作。为了保证主控端对被控端的可靠控制, 主控端和被控端采用有连接的 TCP 协议连接。本文转载自http://www.biyezuopin.vip/onews.asp?id=15028为了到达快速有效地控制被控端, 主控端发送给被控端的命令包含的字节数应该尽量的少。其次被控端要正确的解析被控端发送的命令同时也要快速发回主控端需要的信息。

2.6运行环境规定
2.6.1硬件配置
CPU:2.40GHz
USB:可用
2.6.2软件配置
操作系统:Windows7 标准版或以上版本 64 位操作系统
开发工具:Visual C++ 6.0
开发框架:Microsoft Foundation Classes

3.系统架构

在本软件设计中,采用典型的 C/S 结构,由客户端与服务端两部分构成。非对等作用是客户/服务器模式的最显著的特点,即不平等地位的体现是客户相对于服务器的集中体现,服务端提供服务,客户端提供请求。

//Base64编码解码
/*
功能:将任意字节转为可读字符,在HTTP环境下传递较长的标识信;
处理过程:以3个字节为一组(24位),每6位扩展成8位得到4个字节(32位)
*/
#include "stdafx.h"
#include "Base64.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endifCString CBase64::m_sBase64Alphabet =
_T( "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" );//密文显示int CBase64::m_nMask[] = { 0, 1, 3, 7, 15, 31, 63, 127, 255 };//子网掩码?CBase64::CBase64()
{
}CBase64::~CBase64()
{
}CString CBase64::Encode(LPCTSTR szEncoding, int nSize)//编码(要编码的字符串指针,要编码字符串长度)
{CString sOutput = _T( "" );int nNumBits = 6;//每6位编码UINT nDigit;int lp = 0;ASSERT( szEncoding != NULL );if( szEncoding == NULL )return sOutput;m_szInput = szEncoding;m_nInputSize = nSize;m_nBitsRemaining = 0;nDigit = read_bits( nNumBits, &nNumBits, lp );while( nNumBits > 0 ){sOutput += m_sBase64Alphabet[ (int)nDigit ];nDigit = read_bits( nNumBits, &nNumBits, lp );}// Pad with '=' as per RFC 1521while( sOutput.GetLength() % 4 != 0 ){sOutput += '=';//用=填充}return sOutput;
}//解码:要求编码字串长度的4/3,否则让他们同长
int CBase64::Decode(LPCTSTR szDecoding, LPTSTR szOutput)
{CString sInput;int c, lp =0;int nDigit;int nDecode[ 256 ];ASSERT( szDecoding != NULL );ASSERT( szOutput != NULL );if( szOutput == NULL )return 0;if( szDecoding == NULL )return 0;sInput = szDecoding;if( sInput.GetLength() == 0 )return 0;// Build Decode Table//for( int i = 0; i < 256; i++ )nDecode[i] = -2; // Illegal digitfor( i=0; i < 64; i++ ){nDecode[ m_sBase64Alphabet[ i ] ] = i;nDecode[ m_sBase64Alphabet[ i ] | 0x80 ] = i; //忽略第8个比特nDecode[ '=' ] = -1;nDecode[ '=' | 0x80 ] = -1; // 忽略MIME填充字符}// 清除输出缓冲区memset( szOutput, 0, sInput.GetLength() + 1 );// 编码for( lp = 0, i = 0; lp < sInput.GetLength(); lp++ ){c = sInput[ lp ];nDigit = nDecode[ c & 0x7F ];if( nDigit < -1 ){return 0;}else if( nDigit >= 0 )//递增排序iwrite_bits( nDigit & 0x3F, 6, szOutput, i );}return i;
}UINT CBase64::read_bits(int nNumBits, int * pBitsRead, int& lp)
{ULONG lScratch;while( ( m_nBitsRemaining < nNumBits ) &&( lp < m_nInputSize ) ){int c = m_szInput[ lp++ ];m_lBitStorage <<= 8;m_lBitStorage |= (c & 0xff);m_nBitsRemaining += 8;}if( m_nBitsRemaining < nNumBits ){lScratch = m_lBitStorage << ( nNumBits - m_nBitsRemaining );*pBitsRead = m_nBitsRemaining;m_nBitsRemaining = 0;}else{lScratch = m_lBitStorage >> ( m_nBitsRemaining - nNumBits );*pBitsRead = nNumBits;m_nBitsRemaining -= nNumBits;}return (UINT)lScratch & m_nMask[nNumBits];
}void CBase64::write_bits(UINT nBits,int nNumBits,LPTSTR szOutput,int& i)
{UINT nScratch;m_lBitStorage = (m_lBitStorage << nNumBits) | nBits;m_nBitsRemaining += nNumBits;while( m_nBitsRemaining > 7 ){nScratch = m_lBitStorage >> (m_nBitsRemaining - 8);szOutput[ i++ ] = nScratch & 0xFF;m_nBitsRemaining -= 8;}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/8Wym4XDL.shtml

相关文章

同一个局域网之内,如何远程控制对方的电脑而且不用对方同意

条件&#xff1a; 1、同一个局域网之内&#xff1b; 2、远程控制对方电脑&#xff1b; 3、不用对方做任何操作&#xff08;QQ远程控制需要对方点击同意才能进行远程&#xff09; 具体操作如下&#xff1a; 一、关闭对方电脑的防火墙 二.允许电脑被对方远程 计算机-属性-远…

详解LinkedList

目录 一、介绍 二、源码分析 1、LinkedList实现的接口 2、LinkedList中的变量 3、LinkedList的构造方法 &#xff08;1&#xff09;无参构造方法 &#xff08;2&#xff09;带集合参数的构造方法 4、LinkedList中的重要方法 &#xff08;1&#xff09;静态内部类Node …

java linkedlist 节点_JAVA学习-LinkedList详解

1.定义 实现List接口与Deque接口双向链表&#xff0c;实现了列表的所有操作&#xff0c;并且允许包括null值的所有元素&#xff0c;对于LinkedList定义我产生了如下疑问&#xff1a; 1.Deque接口是什么&#xff0c;定义了一个怎样的规范? 2.LinkedList是双向链表&#xff0c;其…

LinkedList入门教程

目录 LinkedList是什么&#xff1f;LinkedList的使用创建对象添加元素删除元素获取长度排序 常用方法 LinkedList是什么&#xff1f; LinkedList是一种数据结构&#xff0c;它由节点组成&#xff0c;每个节点包含一个值和一个指向下一个节点的指针。这种数据结构非常适合插入和…

Java--LinkedList

LinkedList的特点 LinkedList是基于双向链表实现的有序集合&#xff1b;LinkedList是非线程安全的&#xff1b;LinkedList中的元素可重复&#xff0c;可为null值&#xff1b;LinkedList可实现快速的插入和删除操作&#xff0c;与ArrayList相比&#xff0c;LinkedList的增删操作…

LinkedList 基本使用

文章目录 1. LinkedList 简介2. LinkedList 底层操作机制3. LinkedList 源码分析4. LinkedList 增删改查案例5. ArrayList和LinkedList比较 1. LinkedList 简介 LinkedList 底层实现了 双向链表和双端队列 特点可以添加任意元素(元素可以重复)&#xff0c;包括null线程不安全&…

java linkedlist poll_java之LinkedList详细介绍

1 LinkedList介绍 LinkedList简介 LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 List 接口&#xff0c;能对它进行队列操作。 LinkedList 实现 Deque 接口&#xff0c;即能将LinkedList当作双端队…

LinkedList简介

LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedList 实现 List 接口&#xff0c;能对它进行队列操作。 LinkedList 实现 Deque 接口&#xff0c;即能将LinkedList当作双端队列使用。 LinkedList 实现了Clo…

LinkedList特点

聊一聊LinkedList的特点吧~&#xff08;以下都是基于jdk1.8&#xff09; 继承树 LinkedList的继承树如下图&#xff1a; 特点 &#xff08;1&#xff09;允许null值 &#xff08;2&#xff09;内部以双向链表的形式来保存集合中的元素 /*** Pointer to first node.* Inva…

数据结构之链表(LinkedList详解)

文章目录 一、什么是LinkedList&#xff1f;二、LinkedList的使用三、LinkedList自实现四、链表实现逆序打印的两种方式&#xff08;递归和非递归&#xff09; 五、ArrayList和LinkedList有什么区别&#xff1f; 一、什么是LinkedList&#xff1f; LinkedList的底层是 双向链表…

LinkedList用法详解

一、LinkedList简单介绍 LinkedList是List接口的实现类&#xff0c;因此也实现了List的方法。但LinkedList是采用链表结构的方式来实现List接口的&#xff0c;因此在进 行insert 和remove动作时效率要比ArrayList高。 二、LinkedList的用法介绍 1、add和push 通过这两种方法均…

Java集合类——LinkedList(单链表及双链表)

一&#xff0c;ArrayList的缺陷 1.空间浪费 在之前的博客中&#xff0c;我利用源码详细的讲解了ArrayList这个集合类&#xff08;尤其是扩容机制&#xff09;&#xff0c;可以知道ArrayList的底层主要是一个动态的可变数组&#xff0c;容量满的时候需要进行1.5倍扩容。但是我…

java学习之LinkedList(链表)

LinkedList&#xff1a;一种线性表&#xff0c;但不按照线性顺序存储数据&#xff08;实际上为链表&#xff09;。 链表分为单向链表和双向链表&#xff0c;实际应当还有循环链表。 单向链表&#xff1a;将一个区域分成两部分&#xff0c;分别为节点区域和数据域。 如下图所…

LinkedList和ArrayList对比各有什么优势?

一、LinkedList的概述 1. LinkedList是双向链表实现的List 2. LinkedList是非线程安全的 3. LinkedList元素允许为null&#xff0c;允许重复元素 4. LinkedList是基于链表实现的&#xff0c;因此插入删除效率高&#xff0c;查找效率低(虽然有一个加速动作) 5. LinkedList是…

LinkedList详解

文章目录 介绍继承体系 LinkedLists实现底层数组结构构造函数getFirst(),getLast()removeFirest(),removeLast(),remove(e),remove(index)删除head元素删除last元素add()addAll()clear()查找操作遍历 介绍 LinkedList同时实现了List接口和Deque对口&#xff0c;也就是收它既可…

Chrome被百度网页劫持

Chrome被百度劫持的解决办法 浏览器的运行太慢了&#xff0c;就想试试谷歌的浏览器&#xff0c;但是每次打开的都是百度的界面&#xff0c;明显就是被劫持了&#xff0c; 看了网上的好多方法都没有什么明显的效果 问题 在使用Chrome浏览器打开后直接弹出一个百度的界面这看着就…

网页被劫持怎么修复?主页被劫持修复方法

电脑的浏览器被劫持了应该怎么解决&#xff1f;小编今天就来教大家解决电脑浏览器自动跳转到一个网页中的问题。 方法步骤 1.随着网络的兴起&#xff0c;更多的小伙伴享受到网络带来的便利生活&#xff0c;其中上网浏览就是非常受欢迎的一个功能&#xff0c;但是很多不法分子看…

Google Chrome主页被iduba劫持解决方法

今天用电脑的时候发现google的主页被改成了iduba的主页&#xff0c;烦的一比&#xff0c;看了好久才解决1.查看chrome://version 在命令行处会发现带有iduba的网站&#xff0c;我这里解决了&#xff0c;就没有了 2.点开google快捷方式的属性进行修改 将命令行中的代码全部复制…

浏览器被劫持怎么解决?关于浏览器被劫持主页的处理方法

背景: 上个月重做了win10系统,系统激活过程中没有出现任何问题。重装office套装,使用暴风激活下载地址: (http://win.shibojiaa.cn/baofeng/)激活office套装后,发现所有浏览器主页被劫持。打开任何一个浏览器地址栏中显示:(http://uj7.gndh555.top/)随后跳转hao123。…

Microsoft edge 主页被劫持的处理办法

最根本的办法&#xff0c;如果是任务栏固定打开后发现主页被劫持&#xff0c;应该是弄明白任务栏的链接是来自电脑的开始页面还是桌面的快捷方式。 如果是开始界面应用固定于任务栏&#xff0c;那么找到开始界面的Microsoft edge&#xff0c;右键然后找到所在文件夹。 找到开始…