有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SNMP4J发送从不超时

我在使用SNMP4J库时遇到问题。当发送请求的SNMP服务器正在运行时,我的代码工作得很好,但当它不运行时,我希望SNMP请求最终超时。然而,它从不超时。例如,下面的代码,即使dcadb2不存在(即无法ping此主机名),程序也不会打印“超时”。它将尝试无限远地到达设备

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;
}

共 (1) 个答案

  1. # 1 楼答案

    我找到了解决办法。事实证明,如果你给它一个不存在的IP,SNMP4J(或者至少是我正在使用的版本,1.11.2)就会超时,但如果你给它一个不存在的主机名,它就不会超时。在后一种情况下,线程将无限继续。所以解决方案是使用IP地址