java 您所在的位置:网站首页 java如何连接打印机 java

java

#java| 来源: 网络整理| 查看: 265

基本上,我需要检查 n/w 打印机的状态,是否打开。有没有办法在 Java 中做到这一点?

有任何第三方 API 或工具吗?

我尝试在 java 中使用 PrintServiceLookup,但它没有给出状态,无论是否打开。

此外,如果它在 java 中不可能,是否有任何命令可以在 Windows 中运行以提供打印机的状态?

然后我可以在 java 中运行这个命令并检查。

最佳答案

根据“How Network Printing Works”,这实际上取决于打印机的类型及其支持的协议(protocol)。如果您知道打印机使用的 IP 和端口,并且您的打印机支持 SNMP (只是选择一个协议(protocol))你可以使用 SNMP 协议(protocol)来查询你的打印机信息。有 Java 库 SNMP4j这可以帮助您实现这一目标。我建议不要使用它,除非打印机、ip 和端口 永远不会(!)改变您的设置。这是因为您可能会遇到几个问题

如何发现未知打印机? 如何发现打印机使用的端口? 如何发现打印机使用的协议(protocol)?

让我们假设上面的问题不是什么大问题,让我们假设每台打印机都支持 SNMP。如何从中获取信息?除了使用提到的 java 库,您还可以使用 snmpget在 linux 中从终端。语法如下:

snmpget -v1 -c public host-ip OID

OID 是 object identifier对于您打印机的每个属性,从 pagecount 到 toner-cardridge 信息。如果您不添加 OID,您将获得可用 OID 的完整列表。问题的症结在于,尽管所有 OID 都是标准化的,但 OID 的使用因品牌和打印机型号而异。对于我的惠普,以下工作:

snmpget -v1 -c public 192.168.1.10 iso.3.6.1.2.1.43.17.6.1.5.1.2

返回

iso.3.6.1.2.1.43.17.6.1.5.1.2 = STRING: "Ready"

使用 OID 返回我的惠普打印机的状态。但是如果我在我的 Canon 上使用相同的 OID,我会得到 ​​p>

Error in packet Reason: (noSuchName) There is no such variable name in this MIB. Failed object: iso.3.6.1.2.1.43.17.6.1.5.1.2

因此它甚至不是 SNMP 普遍适用的,更不用说其他可用的协议(protocol)了。

考虑到所有这些信息,我认为最简单的方法就是检查您是否可以通过此代码在一个常用打印机端口上建立与打印机的连接

boolean available = false; try { String serverAddress = "192.168.1.10"; Socket s = new Socket(serverAddress, 9100); s.close(); available = true; } catch (IOException e) { available = false; } System.out.println("printer available: " + available);

当然这只有在您已经知道打印机 ip 的情况下才有效。

关于java - 如果 PC 连接到网络打印机,如何在 java 中检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33116375/



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有