图2-5网络打印流程 由以上分析可知,IPP是以TCP/IP,HTTP等协议为基础的,而TCP/IP是一 个协议族,由上百种协议构成。对基于嵌入式系统的IPP打印机而言,既没有必 要也没有可能去实现全部的底层协议。但是,为了满足IPP的基本要求,应该实 现如下所示的协议族。 实现IPP打印机需要实现的通讯协议 [6] ,如表2-1所示: 表2-1IPP打印机需实现的通讯协议 2.3.2网络打印协议 目前在网络打印中,使用的协议有SMB(Server Message Block)协议、LPD (逐行打印机守护进程协议)、和IPP(Internet Printing Protocol)协议 [7-11] 。 2.3.2.1 SMB/CIFS协议 SMB协议是建立在NETBIOS协议基础上的应用协议,是基于TCP的 138、139两个端口的服务。NETBIOS出现后,微软就使用NETGBIOS实现了 一个网络文件/打印服务系统。这个系统基于NETBIOS设计了一套文件共享协 议,微软称之为SMB协议。这个协议被Microsoft用于它们Lan Manager和 Windows NT服务器系统中,而Windows系统均包括这个协议的客户软件,因而 这个协议在局域网系统中影响很大,它实现了不同计算机之间共享打印机和文件 等。但它无法在跨网络的环境中进行工作。 随着Internet的流行,Microsoft希望将这个协议扩展到Internet上去,成为 Internet上计算机之间相互共享数据的一种标准。因此它将原有的几乎没有多少技 术文档的SMB协议进行整理,重新命名为CIFS(Common Internet File System), 并打算将它与NetBIOS相脱离,试图使它成为Internet上的一个标准协议。 与其他标准的TCP/IP协议不同,SMB协议是一种复杂的协议,因为随着 Windows计算机的开发,越来越多的功能被加入到协议中去了,很难区分哪些概 念和功能应该属于Windows操作系统本身,哪些概念应该属于SMB协议。其他 网络协议由于是先有协议,实现相关的软件,因此结构上就清晰简洁一些,而SMB 协议一直是与Microsoft的操作系统混在一起进行开发的,因此协议中就包含了大 量的Windows系统中的概念。 2.3.2.2 LPD协议 LPD协议在20世纪70年代早期在UNIX开发的示例基础之上实现的,该协 议是为了支持逐行打印机的打印。 通过该协议,Windows系统能够通过Windows NT作应用网关使用Unix上的 打印资源,因为Windows NT系统中支持TCP/IP网络打印服务,由于这个服务 可以支持LPD协议,因此Windows NT也能作为一个打印机网关,将其他 Windows客户的打印请求转换为lpd请求,发送给Unix计算机,或者从Unix上 打印到Windows NT计算机上。但是,在使用LPD协议进行网络打印的时候,无法对打印的状态进行监控。 例如,无法获得服务器中的打印数量,打印服务器本身的状态信息。 2.3.2.3 IPP协议 这一章节将讨论IPP的具体内容及其如何工作,如果使用的计算机直接与打 印机相连,那么可能不需要IPP,但是在网络打印时代中它是不可或缺的部分。 1998年底IETF(Internet Engineering Task Force)提出了IPP协议,2000年 9月发布的IPP1.1是由几乎所有主流的打印机及软件厂商都参与制订的协议。 IPP协议是一个在Internet上传送打印任务的国际标准,它提供了远程打印 的实用性和高效性,并且提供远程管理打印机的能力。它的初衷是使通过网络或 更大一些的互联网络进行基于IP地址的打印更容易实现。像HP这样的公司已经 引入了一些支持IPP标准的设备,随着IPP进一步标准化会有更多的公司做到这 一点。 IPP会使用HTTP并作为HTTP的附属,而不是一个完全不同的位于HTTP 之上的协议。这样可以利用HTTP的特性使实现起来更容易,因为大多数生产商 已经熟悉HTTP,因此IPP协议是一个基于Internet应用层的协议,它面向终端用 户和终端打印设备。IPP基于常用的Web浏览器,采用HTTP和其他一些现有的 Internet技术,在Internet上从终端用户传送打印任务到支持IPP的打印输 出设备中,同时向终端设备传送打印机的属性和状态信息。通过IPP打印设备, 用户可通过Internet快速、高效、实用地实现本地或远程打印,无需进行复杂 的打印机安装和驱动安装。 IPP协议采用超文本传输协议HTTP的POST方法在客户端和打印服务器 建进行会话。对客户端而言,用户可以通过IPP发送两种类型的报文,查询打印 机状态的报文和提交打印作业的报文,同时客户端也可以接收来自打印服务器的 通知。在IPP中涉及的对象用对象模型来描述,共有3种对象。 (1)打印机对象。该对象封装了打印机设备,所有实际的打印任务都由该对 象完成。 (2)作业对象。该对象封装了一个或多个文件组成的打印作业。 (3)预定对象。封装了通知机制,在作业或打印机对象的状态发生改变时, 将触发通知。 IPP打印通过对相关对象的一系列操作来实现。每个操作由请求和响应两部 分组成,而每个部分都包含与此操作相关的操作属性。当客户要与某个对象进行通讯时,便发出对那个对象的操作请求,它包括操作属性、对象属性以及此操作 要求的文档数据。而对象在收到操作请求后,会对请求方发出一个响应以表明此 操作是否成功。这个响应包含操作属性、对象属性以及在执行此操作请求时产生 的相关状态信息。 下面以一个打印作业过程为例介绍IPP协议的工作原理。 (1)IPP打印输出设备的寻址和定位 IPP打印输出设备可以是一台支持IPP协议的打印机,也可以是一台支持IPP协 议的打印机服务器加上一台或几台打印机。由于需要支持IPP协议,IPP打印输出 设备与普通打印输出设备要有一定区别。实现它必须具有独立的内部处理器,同 时还要有符合要求的存储器容量。再者它要具有接入Internet的网络接口,支持 Internet的常用通讯协议,同时还要支持SNMP(Simple Network Management Protocol,简单网络管理协议)。 支持IPP的打印设备连接到Internet后,将拥有一个IP地址,成为Internet上 的一个独立的终端设备。一个终端计算机可以通过浏览器寻址这台打印设备,寻 址过程可以通过输入IP地址,也可通过输入打印机名称进行。如果此时这台打印 设备开机并且在线,它将向寻址它的计算机返回打印机的属性信息,包括支持的 打印介质类型、尺寸和是否支持彩色等。 (2)传送打印作业、打印机状态信息、取消打印作业 终端计算机将要打印的作业信息数据包(包括打印作业的名称、所使用的介 质、打印分数、打印内容等)按照IPP协议进行编码,并按照协议发送到IPP打印 设备中,IPP打印设备将接收到的信息按照协议进行解码,并根据自己的属性解释 生成打印内容。打印机在开始打印以前和打印过程中要向寻址它的终端计算机传 送自己的状态信息,如耗材状态、介质状态等。目前的IPP 1.0中终端计算机可 对IPP打印设备进行取消和终止已经开始的打印作业的控制功能。 以上就是关于IPP协议的介绍,在第三章3.1.3及3.2.1将详细介绍基于IPP协 议的监控实现方式。 2.4打印机监控模块涉及到的其它相关技术 内网监管系统中打印机监控模块的具体实现还用到了其他如下相关的技术。 2.4.1后台服务程序开发 在本系统中将打印的监控端放到了打印服务器上,由于只是完成缓存文件解 析以及打印作业的控制,将解析出的文件打印信息以及控制结果信息发往数据库 及主控端,没有必要让用户感觉到有该应用程序的存在,因此,最好的方法就是 将该监控程序做成后台服务程序并关掉该服务程序的暂停,停止功能。 在2000/XP等基于NT的操作系统中,有一个服务管理器,它管理的后台进程 被称为service(服务)。service是一种应用程序类型,它在后台运行,与UNIX 后台应用程序类似。服务应用程序通常可以在本地和通过网络为用户提供一些功 能,例如客户端/服务器应用程序、Web服务器、数据库服务器以及其他基于服务 器的应用程序。后台服务程序是在后台悄悄运行的。通过将自己的程序登记为服 务,可以使自己的程序不出现在任务管理器中,并且随系统启动而最先运行,随 系统关闭而最后停止。 服务控制管理器是一个RPC服务器,它显露了一组应用编程接口,程序员可 以方便的编写程序来配置服务和控制远程服务器中服务程序。 服务程序通常编写成控制台类型的应用程序,总的来说,一个遵守服务控制 管理程序接口要求的程序包含下面三个函数: (1)服务程序主函数(main):调用系统函数StartServiceCtrlDispatcher 连接程序主线程到服务控制管理程序。 (2)服务入口点函数(ServiceMain):执行服务初始化任务,同时执行多 个服务的服务进程有多个服务入口函数。 (3)控制服务处理程序函数(Handler):在服务程序收到控制请求时由控 制分发线程引用。(此处是Service_Ctrl)。 另外在系统运行此服务之前需要安装登记服务程序:installService函数。 删除服务程序则需要先删除服务安装登记:removeService函数。 关于服务类型,有以下几类,如表2-2所示: 表2-2后台服务类型 2.4.2多线程技术 按照打印监控模块的设计,在解析出打印基本信息后,需要将解析出的打印信 息实时上传至数据库,这就要求在处理解析文件的同时进行信息的传输,因此这里 采用了多线程技术[12]。 Windows系列是一个多任务操作系统,它可以同时运行多个线程。为了同时运 行所有的线程,操作系统为每个独立线程安排了一些CPU时间。操作系统以轮转方 式向线程提供时间片(称为quantum)。由于CPU运行速度足够快,给人一种假象, 好象这些线程是同时运行的。与此形成鲜明对比的是DOS操作系统,在DOS中一次 只能有一个程序在运行,每个程序也只有一个执行流程。利用多线程技术可以充 分利用计算机资源,这包括CPU时间、外设等等[13]。 多线程技术的基本概念如下: 进程:一个进程通常定义为一个程序的实例。在Win32中,它占据4GB的地址 空间,在这个空间中存放了应用程序的代码和数据,程序需要的动态连接库也将 装入到这个空间。但是进程是没有活力的,它只占据着空间,什么也不做。 线程:线程是一个独立的执行路径。当一个进程启动时,系统会自动生成一 个主线程,而后主线程可以生成其他的线程。线程分为两类,工作线程和用户界 面线程。用户界面线程拥有自己的窗口,因此需要处理消息循环。而工作线程没 有,所以工作线程更容易使用。 在windows中使用多线程:Windows提供了一组API函数用于工作线程的启动、 退出、挂起和改变优先级。表2-3中列出关于线程的API函数。 表2-3 Windows关于线程的API函数 2.5小结 本章介绍了打印的工作原理、工作方式以及与其相关的主要网络打印协议, 继而介绍了内网监管系统中打印机监控模块涉及到的其他相关的技术。