

免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
杭州师范学院信息工程学院毕业论文(设计)目 录第一章 引言 1 第二章 相关技术 12.1 winsock编程模型 12.1.1 winsock 基本概念 12.1.2 选择合适的通讯协议 12.2 tcp 和 udp 基础 22.2.1 tcp协议基础 22.2.2 udp协议基础 22.2.3 协议的设置 22.3 面向连接的客户/服务器模型时序图 3第三章 cs模式远程控制程序设计 33.1 主要实现功能 33.2 客户端(监控端)设计 43.2.1添加主机 43.2.2发送消息 53.2.3监视屏幕 53.2.4文件操作 5 3.2.5关闭、重启计算机 7 3.3 服务器端(被监控端)程序设计 73.3.1 进行侦听,时刻准备接受连接 73.3.2 子功能程序实现 83.3.3“文件传输”程序实现 9第四章 总结与展望 11参考文献 11英文摘要 12cs模式远程控制程序设计摘 要:网络实时监控系统由客户端和服务器端两个子系统组成。客户端用于实施各种对联网计算机的监控操作,服务器端对于接收到的数据进行分析,解释并执行。本文首先对winsock 控件作了简单介绍,及如何选择适合的协议:用户数据文报协议(udp)还是传输控制协议(tcp)。最后阐述了如何利用 winsock 控件与远程计算机建立连接,并实现发送消息、监视屏幕、文件传输等功能。关键词: winsock控件,tcp/udp协议,客户端/服务器模式,远程控制,文件传输 1 引言网络在计算机世界里,越来越发挥着举足轻重的作用,很多单位、部门都建立了自己的内部网。对于网络管理人员来说,在整个网络运行期间,希望能够实时的监控联网计算机的运行状态和进行一些相关操作;希望能够传输文件;希望能够防止病毒的蔓延、非法程序的拷贝、杜绝某些用户的越权或非法操作等。为此,我们都希望编写一个适合于自己所在局域网的通讯程序。在此,使用vb 6.0(visual basic 6.0)开发了一套能对联网的每台计算机进行实时监控的网络系统。2 相关技术客户/服务器技术是当今比较流行与具有发展的技术之一。以之构成的客户、服务器应用系统具有系统结构优化、资源利用率高、整体运算速度快的优点,因而得到了广泛的应用。在windows应用程序中,处理实时通讯最常用到的还是microsoft公司提供的winsock控件。2.1 winsock编程模型网络客户/服务器模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机打开一个端口并进行监听, 如果有客户机向服务器的这一端口提出连接请求, 服务器上的相应程序就会自动运行,来应答客户机的请求。而winsock的正确使用,给设计者带来了极大的方便,使得各种应用程序能够在windows环境下顺利进行各种网络通讯。2.1.1 winsock 基本概念winsock 的全名是windows socket,是microsoft windows 环境下的标准tcp/ip 网络开发环境,是介于windows tcp/ip 的protocol stack之间的一项标准接口。winsock是一个基于socket 模型的api,它包括许多为unix 开发的berkeley函数和基于windows消息驱动机制的windows扩展函数,winsock规范定义了一个tcp/ip网络上开发windows程序的接口标准,其所提供的程序库winsock.dll 会负起与网络底层沟通的工作,它提供了访问 tcp 和 udp 网络服务的方便途径。microsoft access、visual basic、visual c+ 或 visual foxpro 的开发人员都可使用它。进而使得设计者能设计出更多功能或更具有用户友好性的网络软件。2.1.2 选择合适的通讯协议在使用winsock时,首先需要考虑使用什么协议。可以使用的协议包括 tcp协议 和 udp协议。两种协议之间的重要区别在于它们的连接状态:(1)tcp 协议控件是基于连接的协议,可以将它同电话系统相比。在开始数据传输之前,用户必须先建立连接。(2) udp 协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。 到底选择哪一种协议通常是由需要创建的应用程序决定的。下面的几个问题将有助于选择适宜的协议:(1)在收发数据的时候,应用程序是否需要得到客户端或者服务器的确认信息?如果需要,使用 tcp 协议,在收发数据之前先建立明确的连接。(2)数据量是否特别大(例如图象与声音文件)?在连接建立之后,tcp 协议将维护连接并确保数据的完整性。不过,这种连接需要更多的计算资源,因而是比较“昂贵”的。(3)数据发送是间歇的,还是在一个会话内?例如,如果应用程序在某个任务完成的时候需要通知某个计算机,udp 协议是更适宜的。udp 协议适合发送少量的数据。 2.2 tcp 和 udp 基础 利用winsock控件可以与远程计算机建立连接,并通过用户数据文报协议 (udp)或者传输控制协议 (tcp)进行数据交换。这两种协议都可以用来创建客户与服务器应用程序。通过设置winsock控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。2.2.1 tcp协议基础tcp协议:传输控制协议(transmission control protocol),允许创建和维护与远程计算机的连接。建立连接后的两台计算机就可彼此进行数据传输。在创建应用程序之前,必须决定应用程序是服务器还是客户端:如果创建客户端应用程序,就必须知道服务器计算机名或者 ip 地址(remotehost 属性),还要知道进行“侦听”的端口(remoteport 属性),然后调用 connect 方法。如果创建服务器应用程序,就应设置一个收听端口(localport 属性)并调用 listen 方法。当客户端提出连接请求时,就会发生 connectionrequest 事件。为了完成连接,可调用 connectionrequest 事件内的 accept 方法。建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 senddata 方法。当接收数据时会发生 dataarrival 事件。调用 dataarrival 事件内的 getdata 方法就可获取数据。2.2.2 udp协议基础udp协议:用户数据文报协议(user datagram protocol,是一个无连接协议。跟 tcp 的操作不同,计算机并不建立连接。另外 udp 应用程序可以是客户机,也可以是服务器。为了传输数据,首先要设置客户计算机的 localport 属性。然后,服务器计算机只需将 remotehost 设置为客户计算机的 internet 地址,并将 remoteport 属性设置为跟客户计算机的 localport 属性相同的端口,并调用 senddata 方法来着手发送信息。于是,客户计算机使用 dataarrival 事件内的 getdata 方法来获取已发送的信息。2.2.3 协议的设置在设计时,我们可以按如下方式设置应用程序使用的协议:在“属性”窗口中单击“协议”,然后选择 scktcpprotocol 或者 sckudpprotocol;也可以使用程序代码来设置 protocol 属性,如下所示:winsock1.protocol = scktcpprotocol2.3 面向连接的客户/服务器模型时序图在面向连接的客户/服务器模型下,采用winsock开发接口实现通讯程序,其典型的时序图如图1所示:socket( )connect( )bind( )socket( )listen( )accept( )服务器阻塞、等待客户连接请求时间write( )处理服务请求read( )write( )read( )建立连连服务请求服务应答图1 面向连接客户/ 服务器模式时序图客户3 cs模式远程控制程序设计 上面我们讲了很多的基础知识,是这个cs远程控制应用程序所必须了解的。下面我们来进一步了解此软件的具体实现过程。网络实时监控系统由两个子系统组成:客户端系统和服务器端系统。客户端(监控端)系统安装在网络管理人员的计算机上,用于实施各种对联网计算机的监控操作;服务器端(被监控端)系统安装在每台联网的计算机上,它运行后以图标的方式出现在系统任务栏的提示区中,不影响被监控端的其他操作,只用于响应客户端的监控命令,并根据客户端的需要,及时采样服务器端的相应数据返回给监控端。 3.1 主要实现功能:该软件主要用于远程监控,主要功能包括:(1)添加主机。winsock使用的tcp协议和udp协议允许建立并保持一个到远程计算机上的连接,且可以在连接结束之前实时地进行数据交换。即我们在与远程计算机建立连接之前,可以自由选择想连接的计算机(连接对象)。在添加远程计算机的同时,我们把远程计算机的名称、ip地址、端口号等保存起来;(2)限制系统功能:包括远程关机、远程重启计算机;(3)远程文件操作:主要是文件的上传、下载;(4)发送信息:向被控端(服务端)发送简短信息;3.2 客户端(监控端)设计在监控端主要设计了与服务端进行交互的一些界面,实现上述功能的各个窗体。在客户端应用程序中,主窗体上部的菜单栏中各菜单命令用于实现各种功能。主菜单有四个菜单项:文件、操作、设置和帮助。“文件”菜单有扫描网络、添加主机、删除主机、退出系统四个子菜单;“操作”菜单有监视屏幕、系统控制、文件操作等子菜单,而系统控制又有其下一级菜单,发送消息和重起机器、关闭机器三个菜单命令,“文件操作”的下一级菜单有运行程序、文件传输两项。“设置”菜单中主要用到的菜单项是“查看”。“查看”有其下一级菜单,主要是大图标、小图标、列表和详细资料四项。“帮助”菜单主要是对所做的这个软件的一个简单介绍。3.2.1 添加主机图2 添加主机的界面我们用winsock控件实现的是点对点的通讯。那其中一点是客户端计算机,另一点是服务端的计算机。通过“添加主机”这一操作,我们就把服务端计算机的信息保存起来,为tcpclient.remotehost、 tcpclient.remoteport 提供了数据(tcpclient为winsock 控件的名字)。添加了主机后我们在主窗体上会看到多了一个“计算机”图标。在这里使用了listview控件。listview 控件以 listitem 对象的形式显示数据。每个 listitem 对象都可有一个可选的图标与其标签相关联。该控件擅长于表示数据的子集(比如数据库的成员)或分布式对象(比如文档模板)。该控件可以以四种不同的视图模式显示数据:图标、小图标、列表和报表。listitem 对象由标签(text 属性)和由 imagelist 控件提供的可选图像构成。并且它可以具有两个 imagelist 控件,分别用来设置 icons 和 smallicons 属性。当然,要在 listview 控件中使用图像,必须先向两个 imagelist 控件中充填适当的图像。随后,将 listview 控件和imagelist 控件关联。可以在listview 控件的“属性页”上设定;也可以在运行时分配 imagelist 控件,所需要的代码如下例所示:set object.icons = imagelistset object.smallicons = imagelisticons,smallicons 属性的语法说明:object 对象表达式, 其值是 listview 控件。 imagelist 对象表达式, 其值是 imagelist 控件。 这样就将 imagelist 控件与 listview 控件关联。不在设计时,而在运行时设置 imagelist 控件的一个原因,是因为不同用户需要动态的更换图像。例如,使用单色显示器的用户会希望图标各部分的对比度大一些。listview 控件中对于每一个listitem 对象到底显示哪个图像,由它们索引listimage 对象来决定。在imagelist 与 listview 控件关联后,就可在过程中使用 index 或 key 属性值来引用 listimage 对象。3.2.2 发送消息在前面我们讲了很多用winsock控件建立连接方面的知识。明了只有双方建立了连接之后,才能实现双向数据交换。在此处当打开“发送消息”窗体时,winsock就主动向远程计算机提出连接请求,并且远程计算机也接受了此连接时,可看到“连接成功”的提示信息,按“确定”监控端就可以发送消息了。我们只要在输入框中输入你想传输的信息,再按“确定”就可以了。对方也就会收到此条消息。若没有显示提示信息,则表示连接没有成功,我们也就无法进行消息传送了。有时,用“发送消息”可以取得警告效果:例如:在机房上课,老师看到学生没有按照课堂所指定的作业(操作)在进行,教师机(监控端)就可以发送一条类似于这样的消息:“课堂时间,请不要做与课堂内容无关的东西!”来提醒学生。当然我们也可以用此方式给予学生及时的帮助。3.2.3 监视屏幕选择了被监控的计算机之后,单击“监视屏幕”菜单命令,出现“监视屏幕”窗体,同时winsock控件与远程计算机进行了连接,在窗体的顶端会出现“connected: we can catch remote screen!”则表示已经与远程机子成功建立了连接。不然,我们就无法捕获对方的屏幕信息。单击“show”按钮,就可以显示被监控端的屏幕,知道对方此时此刻正在干什么,任务栏上还打开了哪些程序。若在课堂上,通过屏幕监视,发现了学生在做一些与课堂内容无关的东西,就可以给学生“发送消息”,给予警告!3.2.4 文件操作运行程序 在主窗体中单击“操作”菜单,进入“文件操作”子菜单,在单击“运行程序”,我们就进入了frmexecute.frm窗体。可以看到如下界面:图 3 运行程序的界面当单击下拉列表框的下来按钮,选择你所想运行的程序在服务端计算机的位子,即选定程序所在的当前路径,在此后面输入程序名,按下“确定”按钮,当对方收到此信息后就会自动运行程序。如果你没有输入要执行的程序,按下“确定”按钮,就会出现“您没有指定被监控端需要运行的程序,您要打开指定的文件夹吗?”的提示信息,“确定”或者“取消”你可以自由选择。例如:“%windir%”表示的是windows安装目录 ;“%sysdir%”表示的是windows的系统目录;“%appdir%”表示的是应用程序的当前目录等。若对于下拉列表框中所列的文件夹不熟悉,可以点击“帮助”按钮。就可以看到各字符串所代表的文件路径。文件传输文件传输是监控端一个比较强的功能,当然在程序的实现上相较就稍复杂些。在frmfiletransfer.frm窗体中,在设计时放入了两个winsock控件,一个取名为tcpclient,用于传输一些命令和简短的信息,另一个为tcpsendfile,专用于文件的传递。在打开此窗体的同时这两个控件都与远程计算机进行连接,若我们在窗体的左下角看到“tcpclient connected: welcome!”的字样,则表示tcpclient控件已连接成功;若出现用“msgbox”提示的信息“welcome to this system !”则表示tcpsendfile控件连接成功。只出现其中之一的提示,“文件传输”功能就不能正常实现。窗体的左边框架(localframe)里面显示的是本地计算机的信息,右边框架(remoteframe)显示的是远程计算机的信息。在顶部的下拉框中有三个选项:“我的电脑”、“我的桌面”“我的文档”。选择“我的电脑”,在下方的lvlocal(listview控件名)框中就会显示“我的电脑”下的盘符信息。如果在右边的下拉框中选择“我的电脑”,就会在下方的lvremote(listview控件名)框中显示远程机子“我的电脑”下的盘符信息,看到对方有几个盘符。文本框中显示的是当前文件的路径。图4 文件传输的界面上图就显示了本地计算机中“我的电脑”的信息和远程计算机中“我的文档”的信息。对于如何把远程计算机上的信息传输过来,对于接受到的信息又是如何处理,如何区分哪些是盘符信息,哪些是文件夹、哪些是文件信息,我们在服务器端程序设计中将作重点描述。3.2.5 关闭、重启计算机在监控端单击“重启机器”,在已经与远程计算机建立连接后,调用senddata方法,发送一个命令动词(字符串):restart。当对方接收到此命令信息后,就会“重新启动计算机”。具体实现过程在服务器端作介绍。关闭计算机为同一原理。当网络管理人员发现有非法操作,比如上班玩游戏、安装非法程序等,即可采取发送警告或强制措施,强迫其停止相应操作。3.3 服务器端(被监控端)程序设计被监控端界面非常的简单,有4个commandboutton按钮。在主窗体(frmmain.frm)中添加了两个winsock 控件,分别取名为tcpfile和 tcpserver。tcpserver用于接收一些命令和简短的信息,而tcpfile专用于文件的传递。3.3.1 进行侦听,时刻准备接受连接在“开始服务”按钮下的程序为:private sub cmdbeg_click() tcpserver.localport = 2001 tcpserver.listen tcpfile.localport = 3000 tcpfile.listen cmdbeg.enabled = falseend sublocalport 属性:返回或者设置所用到的本地端口。在设计时是可读/写的,而且是可用的。在这里,我把服务器程序的端口(localport属性)设置为2001和3000。计算机“端口”( port)是计算机与外界通讯交流的出口.其中硬件领域的端口又称接口,如:usb端口、串行端口等。软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和i/o(基本输入输出)缓冲区。一般低于1024的端口都有确切的定义,它们对应着因特网上常见的一些服务。为了避免冲突,我们最好使用大于1024的端口号。当tcpserver和tcpfile两控件用listen方法进入侦听状态后,就等待客户端程序的连接请求。当客户端提出连接请求时,就进行连接。3.3.2 子功能程序实现当winsock控件的state状态为sckconnected,则说明双方已成功建立了连接。此时客户端就可以数据发送过来(用tcpclient .senddata方法)。当服务器程序接收到数据时,产生dataarrival事件,参数bytestotal包含接收到的数据字节数。用getdata方法接收数据。把接收到的数据存放于strdata变量中(strdate 为变长字符串(string)类型)中。程序对于接收到的数据进行分析,得到一些命令动词。判断各个命令动词,然后解释并执行。在这里调用了 dealwithcommand子程序:主要处理部分为:nseplen = instr (1, strgetdata, |, vbtextcompare) if nseplen 0 then strcmd = left ( strgetdata, nseplen 1 ) strarg = right ( strgetdata, len( strgetdata ) nseplen ) else strcmd = strgetdata strarg = end if注:用strcmd变量来存储客户端发过来的命令动词,便于程序进行分辨处理。 select case ucase ( strcmd ) case restartcall adjusttokenprivilegesfornt 在95/98中调用没作用 call exitwindowsex(ewx_reboot, 0)case shutdown call adjusttokenprivilegesfornt 在95/98中调用没作用 call exitwindowsex(ewx_shutdown, 0) case showmsg 接收客户端“发送消息”发送来的信息 msgbox strarg tcpserver.senddata 对方已经收到! case execute mypath = getrealpath(strarg) runshellexecute open, mypath, filename, fdirectory, sw_shownoactivatecase catchscreen 发送屏幕图片 filname = c:catchscreen.bmp 图片名 savepicture capturescreen(), filname call sendonefile(filname) 这是程序的一部分,实现了客户端的五个功能:“重启机器”、“关闭机器”、“发送消息”、文件操作中的“运行程序”和“监视屏幕”。在关闭、重启计算机中调用了api函数:exitwindowsex,在“发送消息”中把收到的信息用msgbox显示出来,并用senddata方法告示客户端信息已经收到。“运行程序”(execute)用getrealpath函数取得服务器端计算机的真实路径,然后调用runshellexecute函数,如果没有指明要执行的程序,那就“打开”了客户端指定的文件夹;如果指明了要执行程序,被指定的程序就运行起来了。例如:在客户端发送:%windir%notepad.exe,在服务端就把 notepad.exe执行起来。而对于“监视屏幕”功能,也是发送了一个命令词“catchscreen”,服务端就调用了capturescreen()函数,生成了屏幕图片并把它保存到一个文件中,然后再把文件传送给客户端,在客户端单击“show”按钮就把远程计算机的屏幕显示出来了。3.3.3 “文件传输”程序实现前面提到:客户端的“文件传输”窗体的右边框架(remoteframe)显示的是远程计算机的信息。对于如何把服务器端的“我的电脑”、“我的桌面”、“我的文档”的信息传送过去,并显示出来呢?对于如何处理接受到的信息,如何区分哪些是盘符信息,哪些是文件夹、哪些是文件信息?我们在此作详细说明。这里我们运用了一个重要技术:在服务器端窗体中添加了三个控件:驱动器列表框(drivelistbox)、目录列表框(dirlistbox)和文件列表框(filelistbox)。当客户端要求的是“我的电脑”信息,我们就把驱动器列表框drremote中的盘符读出,赋给变量strinfo,部分代码如下:for i = 0 to drremote.listcount - 1 strinfo = strinfo & drremote.list(i) & drv & vbcrlfnext然后用senddata 方法把strinfo信息发送给客户端。如果是“我的桌面”,则我们需要找出“我的桌面”的具体路径,我们用getcurrentuserdesktoppath函数取得桌面路径。mypath = getcurrentuserdesktoppath 把路径赋给mypath变量dirfilpath = mypath 保存当前路径,作为所传输文件的上级目录strdata = getdirsandfilesinfo(mypath) 用getdirsandfilesinfo获得桌面的所有信息tcpserver.senddata strdata 把信息发送给客户端 在getdirsandfilesinfo函数中其实就是把目录列表框(dlremote)和文件列表框(flremote)的内容读出。图5 驱动器、文件夹和文件信息的读取对于“我的文档”,它与“我的桌面”是同一原理。而对于某个文件夹下的内容,我们的处理方法也是相同的。只是必须明确知道此文件夹的具体路径。那我们又是如何区分哪些是盘符信息,哪些是文件夹、哪些是文件信息的呢?我们把接收到的信息用showremotedirectiresandfiles函数把它显示到右边的lvremote(listview 控件名)框中。用pth之前的字符串来显示路径,用drv来表示得到的是远程计算机的盘符信息,用dir 表示文件夹信息,用fil 表示文件信息。部分代码如下: if right(strsubstring, 3) = drv then strsubstring = left(strsubstring, len(strsubstring) - 3) call separatepathandname(strsubstring, substrpath, strname) set itmx = lvremote.listitems.add(, strsubstring, strname, drive, drive) itmx.tag = drv end if if right(strsubstring, 3) = dir then strsubstring = left(strsubstring, len(strsubstring) - 3) call separatepathandname(strsubstring, substrpath, strname) set itmx = lvremote.listitems.add(, strsubstring, strname, folder, folder) itmx.tag = dir end if if right(strsubstring, 3) = fil then strsubstring = left(strsubstring, len(strsubstring) - 3) call separatepathandname(strsubstring, substrpath, strname) set itmx = lvremote.listitems.add(, strsubstring, strname, file, file) itmx.tag = fil end iflistview控件以 listitem 对象的形式显示数据。每个 listitem 对象都可有一个可选的图标与其标签相关联。这里我用“drive”(图像名)表示驱动器,用“folder”(图像名)表示文件夹,用“file”(图像名)表示文件。当然也有大图标,小图标的区别。对于客户端的“我的电脑”、“我的桌面”“我的文档”各信息在lvlocal框中显示的原理,与此处是完全相同的。上面我们完成了在lvlocal和lvremote中分别显示文件夹和文件信息,接下来我们就可以进行“文件传输”,在选定了监控端的文件后,我们首先把文件名传送给被监控端,然后单击按钮,通过tcpsendfile.senddata 把文件传送过去,被监控端用tcpfile.getdata接收并生成文件即可。但其中涉及了文件的访问,即文件的读取操作和写入操作。为了保持文件的尺寸,应使用二进制型访问。需要注意的是:当把二进制数据写入文件中时,使用的变量是byte数据类型的数组,而不是string变量。文件有大有小,有些文件不到1k,而有些有几兆(m),几兆的文件并不能一次性就传输完毕,我们采取分块传输,每块的大小为6000字节。主要是调用了sendonefile()和writeblocktofile()两个函数。当文件接收完毕时,发送一个结束标志。在监控端可收到“对方已经接收完毕!”的提示信息。与此同时,我们还必须刷新被监控端当前文件夹下的信息。刷新过程就是再次调用getdirsandfilesinfo函数,并在lvremote框中重新生成各个图标。对于文件从被监控端传输到监控端过程,选定远程计算机的文件,再单击按钮即可。实现原理与文件从监控端传输到被监控端是相同的。4 总结与展望以上讨论了基于客户/ 服务器模式,采用tcp 协议,用winsock技术建立连接的网络计算机实时监控系统的设计过程。着重讨论了客户端通讯程序和服务器端通讯程序的设计。当然它存在一定的缺陷,如在计算机开启时,服务端应用程序就能够自动运行,并使程序运行后,把服务端应用程序的图标显示在windows任务栏的提示区(托盘)中,而不显示在任务栏或桌面上,给用户以更加洁净的感觉。或者更进一步,使服务端系统运行后不仅在任务栏、桌面上不出现,而且在任务列表中都不显示(即同时按下ctrlaltdel键出现的任务窗口中找不到服务端系统的任务条,而实际上已运行)。但由于本人
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陶瓷制作采购合同范本
- 花买卖合同范本
- 私人铺位租赁合同范本
- 呢子面料采购合同范本
- 小区室外配套合同范本
- 渣土堆放合同范本
- 代卖合同范本
- 模具购销合同范本
- 叉车租聘合同范本
- 线路修复施工合同范本
- 2025广东惠州惠城区人民政府河南岸街道办事处招聘编外人员12人笔试备考试题及答案解析
- 2025年江苏劳动保障协理员招聘考试(行政能力测试)历年参考题库含答案详解(5套)
- 呼吸道疾病用药课件
- 2025年军队专业技能岗位文职人员招聘考试(油封员)历年参考题库含答案详解(5套)
- 福建省福州市(八县市)协作校2024-2025学年高一下学期期末考试物理
- 职业病体检医师培训课件
- 2025年临床医师定期考核必考复习题库及答案(900题)
- (完整word版)英语国际音标表(48个)打印版
- 书法的章法布局(完整版)
- GB∕T 10429-2021 单级向心涡轮液力变矩器 型式和基本参数
- 注射技术操作并发症的预防及处理PPT课件
评论
0/150
提交评论