gpt4 book ai didi

java - 如果 PC 连接到网络打印机,如何在 java 中检查?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:19:31 26 4
gpt4 key购买 nike

基本上,我需要检查 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对于您打印机的每个属性,从 pagecounttoner-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,我会得到

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com