我在使用SNMP4J库时遇到了一个问题。当我向其发送请求的SNMP服务器正在运行时,我的代码运行得很好,但是当它没有运行时,我希望SNMP请求最终超时。但是,它永远不会超时。例如,下面的代码,即使dcadb2不存在(即不能ping这个主机名),程序也不会打印"Timed out“。它将尝试无限地到达该设备。
private ResponseEvent getSnmpResponse() {
PDU pdu = createPdu();
Target target = getTarget();
try {
ResponseEvent event = snmp.send(pdu, target, null);
return event;
}
catch (IOException e ){
System.out.println("Timed out");
}
}
protected PDU createPdu() {
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(DISK_TOTAL_OID)));
pdu.add(new VariableBinding(new OID(DISK_AVAIL_OID)));
pdu.add(new VariableBinding(new OID(DISK_USED_OID)));
pdu.add(new VariableBinding(new OID(DISK_PERCENT_USED_OID)));
pdu.setType( PDU.GET );
return pdu;
}
private Target getTarget() {
CommunityTarget target = new CommunityTarget();
target.setCommunity( new OctetString("public") );
target.setAddress( GenericAddress.parse("dcadb2/161") );
target.setRetries( 1 );
target.setTimeout( 1000L );
target.setVersion( SnmpConstants.version2c );
return target;
}
发布于 2015-08-08 04:02:21
我找到了解决方案。如果你给它一个不存在的IP,SNMP4J (或者至少是我使用的版本1.11.2)会超时,但如果你给它一个不存在的主机名,就不会超时。在后一种情况下,线程将继续无限。因此,解决方案是使用IP地址。
https://stackoverflow.com/questions/31866630
复制相似问题