Java UPnP打印机设备发现

Java UPnP打印机设备发现,java,networking,network-programming,upnp,dlna,Java,Networking,Network Programming,Upnp,Dlna,在一个项目中,我通过发送ssdp数据包并接收http url发现了UPnP打印机设备 使用这些url,获得一个打开的连接,获取描述设备和服务详细信息的xml模式 在这里,我通过dom解析获得了详细信息 现在我的问题是,我怎样才能找到 1.打印机的状态 2.打印机是否为双面打印 3.它支持哪种纸张(横向/纵向和尺寸)可能会对您有所帮助 您需要从打印机服务获取attributeSet以查找打印机的详细信息。如果您已经获取了服务详细信息,那么您应该能够理解并使用以下UPnP规范:和(如果您的打印机支持

在一个项目中,我通过发送ssdp数据包并接收http url发现了UPnP打印机设备

使用这些url,获得一个打开的连接,获取描述设备和服务详细信息的xml模式

在这里,我通过dom解析获得了详细信息

现在我的问题是,我怎样才能找到 1.打印机的状态 2.打印机是否为双面打印 3.它支持哪种纸张(横向/纵向和尺寸)

可能会对您有所帮助


您需要从打印机服务获取attributeSet以查找打印机的详细信息。

如果您已经获取了服务详细信息,那么您应该能够理解并使用以下UPnP规范:和(如果您的打印机支持)。我建议在您的网络中使用一些服务发现工具,如DeviceSpy from。您将了解打印机提供的信息,以及它是否可以作为状态变量访问(可能是事件),或者您需要执行RPC on service函数来获取它。具体说明两者之间的区别以及如何获得它们超出了简单S.O.回答的范围。你可以从阅读和理解文章开始。在DeviceSpy中四处嗅探并尝试调用一些东西并查看结果也非常有用

快速浏览一下规格(我更喜欢媒体服务)就可以看出,对于状态(查找
PrinterState
/
PrinterStateReasures
)和纸张尺寸(查找
MediaSize
/
MediaType
),您应该很熟悉
PrintBasic
)。我找不到duplex,它可能隐藏在其他名称下(可能是
Sides
?)。我发现的这些变量很可能是当前工作的单值变量。然后,可能可以使用其他名称访问适用的值枚举,或者您需要执行RPC来获取它。我不会在这里取代您的研发:-)


旁注:通过打开HTTP连接和解析DOM来完成这一切都是不必要的单调乏味(除非您这样做纯粹是为了好玩)。集成一个成熟的现成LIB,如Cling。要正确使用UPnP,除了阅读简单的DOM之外,还需要很多复杂的东西。例如侦听事件订阅和执行SOAP RPC。

您能否解释如何从打印机服务获取属性集,如果可以,请用代码进行解释