在一个项目中,我通过发送 ssdp 数据报包并接收 http url 发现了 UPnP 打印机设备。
使用这些 url,获得一个开放的连接,获得描述设备和服务细节的 xml 模式
这里我通过dom解析得到细节
现在我的问题是,我怎样才能找到 1. 打印机的状态 2. 打印机是否是双面打印机 3. 它支持哪种纸张(横向/纵向以及尺寸)
在一个项目中,我通过发送 ssdp 数据报包并接收 http url 发现了 UPnP 打印机设备。
使用这些 url,获得一个开放的连接,获得描述设备和服务细节的 xml 模式
这里我通过dom解析得到细节
现在我的问题是,我怎样才能找到 1. 打印机的状态 2. 打印机是否是双面打印机 3. 它支持哪种纸张(横向/纵向以及尺寸)
如果您已经获得服务详细信息,那么您应该能够理解和使用以下 UPnP 规范:PrintBasic
服务和PrintEnhanced
服务(如果您的打印机支持)。我建议在您的网络中使用一些服务发现工具,例如Intel UPnP Developer Suite中的 DeviceSpy 。您将了解您的打印机提供了哪些信息,以及它是否可以作为状态变量访问(可能是事件),或者您需要对服务函数执行 RPC来获取它。给出关于两者之间有什么区别以及如何获得它们的具体方法超出了简单的 SO 答案的范围。您可以从阅读和理解UPnP 设备架构文档开始. 在 DeviceSpy 中四处寻找并尝试调用事物并查看结果也非常有帮助。
快速浏览一下规格(我更喜欢媒体服务)表明您应该擅长PrintBasic
状态(查找PrinterState
/ PrinterStateReasons
)和纸张尺寸(查找MediaSize
/ MediaType
)。我找不到双工,它可能隐藏在其他名称下(也许Sides
?)。我发现这些很可能是当前工作的单值变量。然后可能可以使用不同的名称访问适用的值枚举,或者您需要执行 RPC 来获取它。我不会在这里取代你的研发 :-)
旁注:通过打开 HTTP 连接和解析 DOM 自己做这一切是不必要的乏味(除非你这样做是为了纯粹的乐趣)。集成其中一个成熟的现成库,如 Cling。要正确使用 UPnP,除了阅读简单的 DOM 之外,您还需要很多复杂的东西。就像监听事件订阅和做 SOAP RPC。
也许这会对你有所帮助。
您需要从打印机服务中获取属性集以了解打印机的详细信息。