分享
分销 收藏 举报 申诉 / 25
播放页_导航下方通栏广告

类型局域网监控系统详细设计.doc

  • 上传人:仙人****88
  • 文档编号:9200555
  • 上传时间:2025-03-16
  • 格式:DOC
  • 页数:25
  • 大小:190KB
  • 下载积分:10 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    局域网 监控 系统 详细 设计
    资源描述:
    详细设计说明书 详细设计说明书 1.引言 1 1.1编写目的 1 1.2定义 2 2.总体设计 2 2.1软件结构 2 3.程序描述 3 3.1客户端设计 3 3.1.1客户端模块概述 3 3.1.2 客户端技术分析 3 3.1.3客户端实现过程 3 3.2公共类设计 9 3.3系统登录模块设计 10 3.3.1 系统登陆模块概述 10 3.3.2 系统登录模块实现过程。 10 3.4主窗体设计 12 3.4.1 主窗体概述 12 3.4.2 主窗体技术分析 13 3.5操作员管理模块 17 3.5.1操作员管理模块概述 17 3.5.2 操作员管理模块技术分析 18 3.6系统设置模块设计 23 3.6.1 系统设置模块概述 23 3.6.2 系统设置模块技术分析 23 3.6.3 系统设置模块实现过程 23 1.引言 1.1编写目的 详细设计的编写主要面向于程序开发人员及测试人员,给予各部功能的详细说明及源码,以便于程序开发人员及测试人员进行相关工作。 1.2定义 套接字:套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端面点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。 常用的TCP/IP协议的3种套接字类型如下所示。   流套接字(SOCK_STREAM):   流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。   数据包套接字(SOCK_DGRAM):数据包套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据包套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。   原始套接字(SOCK_RAW):原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据包套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据包套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。 2.总体设计 2.1软件结构 服务器端 客户端 系统设置 操作员管理 系统登录 主窗体 主窗体 3.程序描述 3.1客户端设计 3.1.1客户端模块概述 局域网监控系统分为客户端和服务器端两大模块,其中,客户端主要作用是时时抓取本机的屏幕信息,将其分成多个数据报,发送到服务器。为保证屏幕信息能够完整的发送到服务器,客户端在发送一个数据报后,需要等待服务器发来确认消息,然后继续发送下一个数据报。 3.1.2 客户端技术分析 客户端要实现屏幕信息的发送,需要解决两个关键问题:一是获取屏幕信息,将其转换为位图格式;二是通过UDP协议将位图信息发送到服务器。 3.1.3客户端实现过程 (1)创建一个基于对话框的工程,工程名为Client。 (2)在StdAfx.h头文件中引用套接字库和头文件。 #include "Winsock2.h" #pragma comment (lib,"Ws2_32.lib") (3)在应用程序类的InitInstance方法中初始化套接字。 WSADATA data; WSAStartup(2,&data); (4)改写应用程序的虚方法ExitInstance,清理套接字资源。 int CClientApp::ExitInstance() { WSACleanup(); return CWinApp::ExitInstance(); } (5)在对话框中添加如下成员变量。 SOCKET m_Socket; //客户端套接字 CString m_ServerIP; //服务器IP int m_X,m_Y; //抓取屏幕的起始坐标 WORD m_RecvX,m_RecvY;//收到服务器发来的抓取屏幕的起始坐标 BOOL m_Confirm; //确认信息 int m_FrameIndex; //记录索引 int mod; //记录余数 int count; //每一个位图分报的数量 int bmpsize; //位图的实际大小 char* pSendBuf; //发送缓冲区指针 char* pHeader; //临时指针 sockaddr_in addr1; //套接字地址 BOOL m_Received; //是否接收到服务器发来的确认信息 int m_Counter; //记数器 (6)自定义一个消息,在套接字接收到数据时发送到主窗口中。定义每个数据报中包含位图数据的大小。 //自定义一个消息 #define CM_RECEIVED WM_USER+2 //定义每个数据报中包含位图数据的大小 #define GraphSize 1024 (7)在对话框初始化时创建套接字,将其绑定到指定的位置,并初始化相应的成员变量。 BOOL CClientDlg::OnInitDialog() { //获取本机IP hostent* phost = gethostbyname(""); char* localIP = inet_ntoa (*(struct in_addr *)*phost->h_addr_list); sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.S_un.S_addr = inet_addr(localIP); addr.sin_port = htons(5001); //创建套接字 m_Socket = socket(AF_INET,SOCK_DGRAM,0); if (m_Socket == INVALID_SOCKET) { MessageBox("套接字创建失败!"); } char* len = "512"; if (setsockopt(m_Socket,SOL_SOCKET,SO_SNDBUF,len,4)!= 0) { MessageBox("设置失败!"); } //绑定套接字 if (bind(m_Socket,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR) { MessageBox("套接字绑定失败!"); } m_ServerIP= "127.0.0.1"; GetPrivateProfileString("ServerInfo","IP","127.0.0.1",m_ServerIP.GetBuffer(0),MAX_PATH,"./Server.ini"); WSAAsyncSelect(m_Socket,m_hWnd,CM_RECEIVED,FD_READ); m_X = m_Y = 0; m_RecvX = m_RecvY = 0; m_Confirm = TRUE; pSendBuf = new char[1024*1024*2]; pHeader = pSendBuf; OnOK(); m_Received = FALSE; m_Counter = 0; SetTimer(1,1000,NULL); return TRUE; } (8)在对话框类中添加一个SendData方法,用于向指定的地址发送数据。其中,参数index表示数据报的序号,bmpsize表示数据报中位图数据的大小,frames表示总的发送次数,pSendBuf表示发送的数据报,addr表示服务器地址。 int CClientDlg::SendData(UINT index, int mod , int bmpsize , int frames,char *pSendBuf, sockaddr_in &addr) { char* pPackage; int packsize = 0; if ( mod ==0 || index != frames-1) packsize = 2+2+bmpsize+4+2+2+4; else packsize = 2+2+mod+4+2+2+4; pPackage = new char[packsize]; memset(pPackage,0,packsize); //填充数据报 *(WORD*)&pPackage[0] = index; //填充序号 if (index != frames-1) //填充结束标记 *(WORD*)&pPackage[2] = 0; else *(WORD*)&pPackage[2] = 1; //填充位图数据 pSendBuf+=bmpsize*index; memcpy(&pPackage[4],pSendBuf,packsize-16); //填充位图大小 *(int*)&pPackage[packsize-12]= bmpsize; //填充屏幕X坐标 *(WORD*)&pPackage[packsize-8]= m_X; //填充屏幕Y坐标 *(WORD*)&pPackage[packsize-6]= m_Y; //填充数据报大小 *(int*)&pPackage[packsize-4] = packsize; m_Confirm = FALSE; int ret = sendto(m_Socket,pPackage,packsize,0,(sockaddr*)&addr,sizeof(addr)); delete[] pPackage; return ret; } (9)向对话框中添加OnReceived方法,用于接收服务器端发来的确认信息或控制信息。 void CClientDlg::OnReceived() { char* pData = new char[1024]; memset(pData,0,1024); sockaddr_in addr; int factsize =sizeof(sockaddr); int ret = recvfrom(m_Socket,pData,1024,0,(sockaddr*)&addr,&factsize); if (ret != -1) { //读取控制指令 if (ret == 4) //方向 { m_RecvX = *(WORD*)&pData[0]; m_RecvY = *(WORD*)&pData[2]; } else if (ret==8) { m_Received = TRUE; m_FrameIndex +=1; if (m_FrameIndex<count) SendData(m_FrameIndex,mod,bmpsize,count,pSendBuf,addr1); else OnOK() ; } } delete []pData; } (10)向对话框中添加消息映射宏,将CM_RECEIVED消息与OnReceived方法关联。这样,当套接字接收到数据时将调用OnReceived方法读取数据。 BEGIN_MESSAGE_MAP(CClientDlg, CDialog) //{{AFX_MSG_MAP(CClientDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_TIMER() ON_MESSAGE(CM_RECEIVED,OnReceived) //}}AFX_MSG_MAP END_MESSAGE_MAP() (11)处理对话框的WM_TIMER消息,在发送数据后,如果5秒内没有收到服务器的确认信息,放弃当前位图的发送,重新抓取屏幕位图发送。 void CClientDlg::OnTimer(UINT nIDEvent) { if (!m_Received) { m_Counter++; if (m_Counter>5) { m_Counter= 0; OnOK(); //超过5秒没有收到服务器的应答信息,重发数据 } } else { m_Received = FALSE; m_Counter =0; } CDialog::OnTimer(nIDEvent); } (12)处理对话框的OnOk方法,将屏幕信息转换为位图信息,划分数据报的格式,计算每一个位图信息需要发送多少次数据报,调用SendData方法发送数据。 void CClientDlg::OnOK() { CDC* pDeskDC = GetDesktopWindow()->GetDC(); //获取桌面画布对象 CRect rc; GetDesktopWindow()->GetClientRect(rc); //获取屏幕的客户区域 int width = 300; //获取屏幕的宽度 int height = 300; //获取屏幕的高度 CDC memDC; //定义一个内存画布 memDC.CreateCompatibleDC(pDeskDC); //创建一个兼容的画布 CBitmap bmp; bmp.CreateCompatibleBitmap(pDeskDC,width,height); //创建兼容位图 memDC.SelectObject(&bmp); //选中位图对象 BITMAP bitmap; bmp.GetBitmap(&bitmap); int panelsize = 0; //记录调色板大小 if (bitmap.bmBitsPixel<16) //判断是否为真彩色位图 panelsize = pow(2,bitmap.bmBitsPixel*sizeof(RGBQUAD)); BITMAPINFO *pBInfo = (BITMAPINFO*)LocalAlloc(LPTR,sizeof(BITMAPINFO)+panelsize); pBInfo->bmiHeader.biBitCount = bitmap.bmBitsPixel; pBInfo->bmiHeader.biClrImportant = 0; pBInfo->bmiHeader.biCompression = 0; pBInfo->bmiHeader.biHeight = height; pBInfo->bmiHeader.biPlanes = bitmap.bmPlanes; pBInfo->bmiHeader.biSize = sizeof(BITMAPINFO); pBInfo->bmiHeader.biSizeImage = bitmap.bmWidthBytes*bitmap.bmHeight; pBInfo->bmiHeader.biWidth = width; pBInfo->bmiHeader.biXPelsPerMeter = 0; pBInfo->bmiHeader.biYPelsPerMeter = 0; m_X = m_RecvX; m_Y = m_RecvY; memDC.BitBlt(0,0,width,height,pDeskDC,m_X,m_Y,SRCCOPY); char* pData = new char[bitmap.bmWidthBytes* bitmap.bmHeight]; ::GetDIBits(memDC.m_hDC,bmp,0,bitmap.bmHeight,pData,pBInfo,DIB_RGB_COLORS); int BufSize = panelsize+ sizeof(BITMAPINFO)+bitmap.bmWidthBytes* bitmap.bmHeight; memcpy(pSendBuf,pBInfo,sizeof(BITMAPINFO)); char* pHead = pSendBuf; pSendBuf += sizeof(BITMAPINFO); memcpy(pSendBuf,pData,bitmap.bmWidthBytes* bitmap.bmHeight); pSendBuf = pHead; addr1.sin_family = AF_INET; addr1.sin_port = htons(5002); addr1.sin_addr.S_un.S_addr = inet_addr(m_ServerIP); //定义数据报的格式 /*序号2位||结束标记2位||位图数据||位图数据大小4位||屏幕X坐标2位||屏幕Y坐标2位||数据报大小4位*/ //定义每次发送位图数据的大小 bmpsize = GraphSize; //计算每个位图发送的次数 count = BufSize / GraphSize; mod = BufSize % GraphSize; if ( mod != 0) count+=1; m_FrameIndex = 0; int ret = SendData(m_FrameIndex,mod,bmpsize,count,pSendBuf,addr1); pSendBuf = pHead; delete []pData; LocalFree(pBInfo); pDeskDC->DeleteDC(); bmp.DeleteObject(); memDC.DeleteDC(); } 3.2公共类设计 在局域网监控系统的服务器端要对数据库进行操作。为了方便管理,将有关数据库的操作封装为一个类CDataManage。该类中包含ADO Connection对象、ADO Command对象和ADO Recordset对象,并提供InitDatabase方法用于构造ADO对象、连接数据库。CDataManage类具体实现如下: (1)在Visual C++工程中的StdAfx.h头文件中导入msado15.dll动态库。 #import"C:\\ProgramFiles\\CommonFiles\\System\\ado\\msado15.dll"rename_namespace("ADODB") \rename("EOF","ADOEof") using namespace ADODB ; (2)创建一个普通类,命名为CDataManage。在该类中添加如下成员变量。 _ConnectionPtr m_pConnect; _CommandPtr m_pCommand; _RecordsetPtr m_pRecord; static CString m_ConnectStr; (3)在全局区域初始化静态成员m_ConnectStr。 CStrinCDataManage::m_ConnectStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=db_Video.mdb;Persist Security Info=False"; (4)向CDataManage类中添加InitDatabase方法构造ADO对象,并连接数据库。 BOOL CDataManage::InitDatabase() { try { m_pConnect.CreateInstance("ADODB.Connection"); m_pCommand.CreateInstance("ADODB.Command"); m_pRecord.CreateInstance("ADODB.Recordset"); m_pConnect->ConnectionString = m_ConnectStr.AllocSysString(); m_pConnect->Open("","","",-1); } catch(_com_error &err) { MessageBox(NULL,"数据库初始化失败","提示",MB_ICONINFORMATION); return FALSE; } return TRUE; } 3.3系统登录模块设计 3.3.1 系统登陆模块概述 为了防止非法用户使用系统,在局域网监控系统的服务器端提供了系统登录模块。在系统启动时,只有输入正确的用户名和密码后才能进入主界面。系统登录模块运行结果如图3.1所示。 图3.1 3.3.2 系统登录模块实现过程。 (1)创建一个对话框,在对话框中添加1个图像控件、2个标签、2个编辑框和2个按钮控件。 (2)修改对话框类的PretranslateMessage虚方法,当编辑框获得焦点时,按Enter键将控制焦点移动。 BOOL CLogin::PreTranslateMessage(MSG* pMsg) { if (pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN ) { CString str; //获取类名 GetClassName(pMsg->hwnd,str.GetBuffer(0),MAX_PATH); if (str=="Edit") pMsg->wParam = VK_TAB ; } return CDialog::PreTranslateMessage(pMsg); } (3)处理登录按钮的单击事件,验证用户密码是否正确。如果正确,关闭对话框并返回IDOK。 void CLogin::OnLogin() { CString user,password; //获取用户名和密码 m_UserName.GetWindowText(user); m_Password.GetWindowText(password); //判断用户名和密码是否为空 if (user.IsEmpty() || password.IsEmpty()) { MessageBox("用户名和密码不能为空","提示"); m_UserName.SetFocus(); } else //用户名和密码不为空 { _ParameterPtr puser,ppassword; CServerApp* pApp = (CServerApp*)AfxGetApp(); //创建参数 puser = pApp->m_DataManage.m_pCommand->CreateParameter("user",adVarWChar,adParamInput,100,(_bstr_t)user); ppassword = pApp->m_DataManage.m_pCommand->CreateParameter("password",adVarWChar,adParamInput,100,(_bstr_t)password); //添加参数 pApp->m_DataManage.m_pConnect->CursorLocation = adUseServer; pApp->m_DataManage.m_pCommand->ActiveConnection = pApp->m_DataManage.m_pConnect; pApp->m_DataManage.m_pCommand->Parameters->Append(puser); pApp->m_DataManage.m_pCommand->Parameters->Append(ppassword); pApp->m_DataManage.m_pCommand->CommandText = "select * from tb_userInfo where username = @user and password = @password"; _RecordsetPtr pRecord= NULL; pRecord = pApp->m_DataManage.m_pCommand->Execute (0,NULL,adCmdText); pApp->m_DataManage.m_pCommand->Parameters->Delete("user"); pApp->m_DataManage.m_pCommand->Parameters->Delete("password"); if (pRecord !=NULL ) { try //判断是否能够读取数据 { CString str =(char*) (_bstr_t)pRecord->GetFields()->GetItem("UserName")->Value; pRecord ->Close(); } catch(...) { MessageBox("用户名或密码不正确"); m_UserName.SetFocus(); pRecord ->Close(); return; } EndDialog(IDOK); } else { pRecord ->Close(); MessageBox("用户名或密码不正确"); m_UserName.SetFocus(); } } } (4)处理“取消”按钮的单击事件,以IDCANCEL标识结束对话框。 void CLogin::OnBtCancle() { EndDialog(IDCANCEL); } 3.4主窗体设计 3.4.1 主窗体概述 局域网监控系统服务器端主窗体主要用于显示客户端传来的位图信息,并且控制客户端抓图的起始坐标。服务器端主窗体运行效果如下: 3.4.2 主窗体技术分析 主窗体主要接收客户端传来的数据,并且向客户端发送确认信息。这里需要使用相关Windows套接字函数进行数据的接收和发送。 3.4.3 主窗体实现过程 (1)创建一个基于对话框的工程,默认情况下将创建一个对话框,该对话框将成为应用程序的主窗体。 (2)向对话框中添加8个按钮控件、2个群组框控件、1个图像控件,设置控件属性表如下所示: 表:主窗体用到的主要控件 控件资源ID 主要属性设置 用途 IDC_BACKGROUND Type属性为Frame Border属性为TRUE 显示图像信息 IDC_SYSSETTING Caption属性为系统设置 Owner draw属性为TRUE 调用系统设置对话框 (3)向对话框中添加如下成员变量。 SOCKET m_Socket; //定义套接字 char* m_BmpData; //位图数据指针 char* m_TempData; //临时数据指针 char* m_Header; //临时指针 BOOL m_ShowBmp; //是否显示位图 int m_BmpSize; //记录位图大小 int m_RecSize; //实际接收的大小 CString m_ClientIP; //客户端IP UINT m_ClientPort; //客户端端口 WORD m_LeftTopX; //位图在屏幕中的x轴坐标 WORD m_LeftTopY; //位图在屏幕中的y轴坐标 (4)向对话框中添加ShowImage方法,显示位图数据。 void CServerDlg::ShowImage() { if (m_ShowBmp) { BITMAPINFO bInfo; memcpy(&bInfo,m_TempData,sizeof(bInfo)); int x = bInfo.bmiHeader.biWidth; int y = bInfo.bmiHeader.biHeight; StretchDIBits(m_BK.GetDC()->m_hDC,0,0,x,y,0,0,x,y,&m_TempData[sizeof(BITMAPINFO)],&bInfo,DIB_RGB_COLORS,SRCCOPY); } } (5)向对话框中添加OnReceived方法,用于接收客户端发来的数据。在数据接收后,向客户端发送确认信息。 void CServerDlg::OnReceived() { //接收数据 char* buffer = new char[MAX_BUFF]; sockaddr_in addr; int factsize =sizeof(sockaddr); int ret = recvfrom(m_Socket,buffer,MAX_BUFF,0,(sockaddr*)&addr,&factsize); if (ret != -1) { CString revIP = inet_ntoa(addr.sin_addr); if (revIP != m_ClientIP) { delete [] buffer; return; } m_ClientPort = ntohs(addr.sin_port); //记录接收的数据报大小 m_RecSize += ret; //读取序号 WORD orderID = *(WORD*)&buffer[0]; WORD endID = *(WORD*)&buffer[2]; //读取位图大小 int bmpsize = *(int*)&buffer[ret-12]; //获取屏幕的X轴坐标 m_LeftTopX = *(WORD*)&buffer[ret-8]; //获取屏幕的Y轴坐标 m_LeftTopY = *(WORD*)&buffer[ret-6]; //读取结束标记 sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(m_ClientPort); addr.sin_addr.S_un.S_addr = inet_addr(m_ClientIP.GetBuffer(0)); int size = sizeof(addr); //发送确认信息 char* pData = "Confirm"; sendto(m_Socket,pData,8,0,(sockaddr*)&addr,size); if (orderID==0) { m_BmpSize = bmpsize; m_BmpData = m_Header; } else m_BmpSize +=bmpsize; memcpy(m_BmpData,&buffer[4],bmpsize); m_BmpData += bmpsize; m_ShowBmp = FALSE; if (endID==1) { m_ShowBmp = TRUE; m_BmpData = m_Header; memcpy(m_TempData,m_Header,1024*1024); ShowImage() ; m_RecSize = 0; } } delete [] buffer; } (6)在对话框初始化时创建并绑定套接字,从数据库中读取客户端IP。 BOOL CServerDlg::OnInitDialog() { CDialog::OnInitDialog(); 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); } } SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); //获取本机IP hostent* phost = gethostbyname(""); char* localIP = inet_ntoa (*(struct in_addr *)*phost->h_addr_list); sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.S_un.S_addr = inet_addr(localIP); addr.sin_port =
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:局域网监控系统详细设计.doc
    链接地址:https://www.zixin.com.cn/doc/9200555.html
    页脚通栏广告

    Copyright ©2010-2025   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork