Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在snmp4j中实现二进制(b)变量_Java_Snmp_Snmp4j - Fatal编程技术网

Java 如何在snmp4j中实现二进制(b)变量

Java 如何在snmp4j中实现二进制(b)变量,java,snmp,snmp4j,Java,Snmp,Snmp4j,我试图将一个snmpset命令移植到snmp4j,但得到一个错误代码5,这并不能告诉我多少。变量类型为b(二进制)。我查看了SnmpRequest.java源代码的所有示例的末尾,发现b参数被转换为OctetString,如下所示: case 'b': variable = OctetString.fromString(value, ' ', 2); 当我字符串化变量时,我分别得到“0”和“1”的值:00,01 当我从命令行设置OID时,它会回显80和40 jgaer@ljgaer

我试图将一个snmpset命令移植到snmp4j,但得到一个错误代码5,这并不能告诉我多少。变量类型为b(二进制)。我查看了SnmpRequest.java源代码的所有示例的末尾,发现b参数被转换为OctetString,如下所示:

 case 'b':
     variable = OctetString.fromString(value, ' ', 2);
当我字符串化变量时,我分别得到“0”和“1”的值:00,01

当我从命令行设置OID时,它会回显80和40

jgaer@ljgaer2_~: snmpset -t 60 192.168.60.105 cwNetStgSvrWriteEnable.0 b 0
CW-NET-STG-SVR-MIB::cwNetStgSvrWriteEnable.0 = BITS: 80 hwWriteEn(0) 
jgaer@ljgaer2_~: snmpset -t 60 192.168.60.105 cwNetStgSvrWriteEnable.0 b 1
CW-NET-STG-SVR-MIB::cwNetStgSvrWriteEnable.0 = BITS: 40 fsWriteEn(1) 
如果我在snmp4j中获取OID并在响应事件中字符串化variableBindings,那么当OID分别设置为0和1时,我会看到以下内容:

 [1.3.6.1.4.1.27675.20.1.6.0 = 80]
 [1.3.6.1.4.1.27675.20.1.6.0 = c0]
当我以“1”的值运行下面的代码片段时,我得到了一般性错误

    Object result = null;
    PDU pdu = new ScopedPDU();
    pdu.add(new VariableBinding(new OID("1.3.6.1.4.1.27675.20.1.6.0"), OctetString.fromString("1", ' ', 2)));
    pdu.setType(PDU.SET);
    ResponseEvent event = snmp.send(pdu, userTarget);
    if (event != null) {
        pdu = event.getResponse();
        if (pdu.getErrorStatus() == PDU.noError) {
            LOG.debug("SNMPv3 SET Successful for " + oid + " ObjectType " + pdu.get(0).getVariable().getClass() + " value " +
                    pdu.get(0).getVariable() + ":" + pdu.getVariableBindings());
            result = pdu.get(0).getVariable();
        } else {
           LOG.debug("SNMPv3 SET Unsuccessful. Error Code " + pdu.getErrorStatus() + " " + pdu.getErrorStatusText());
        }
    } else {
        LOG.debug("SNMP send unsuccessful.");
    }
    return result;

 output

SNMPv3 SET Unsuccessful. Error Code 5 General variable binding error
如果我使用值“0”运行它,它将无错误地运行,并且对象在远程代理上得到更新,但返回的变量值是00而不是80

[1.3.6.1.4.1.27675.20.1.6.0 = 00]

我对80和C0的返回值感到非常困惑。我还没有弄清楚如何为二进制1创建八进制字符串。

使用xC0(11000000)和x80(10000000)的值而不是1和0来重复设置。在MIB.txt文件中,它指示设置的是MSB。这不完全是MSB,它总是1。不知何故,snmpset理解这种区别,并且知道如何将0和1解释为x80和xC0,我猜在.cds或.cmi文件中,snmpset必须理解某些东西。假设我可以从snmpRequest.java中剪切和粘贴是一个错误。仍在学习snmp。

使用xC0(11000000)和x80(10000000)的值而不是1和0重复设置有效。在MIB.txt文件中,它指示设置的是MSB。这不完全是MSB,它总是1。不知何故,snmpset理解这种区别,并且知道如何将0和1解释为x80和xC0,我猜在.cds或.cmi文件中,snmpset必须理解某些东西。假设我可以从snmpRequest.java中剪切和粘贴是一个错误。仍在学习snmp