关于snmp4j中set问题

时间:2008-07-24 09:24:13   来源:论坛整理  作者:  编辑:chinaitzhe
我现在已经可以get mib库了.但假如我想set某个oid的话,我现在的做法如下:
........
PDU pdu=new PDU();
//变量绑定
VariableBinding vb=new VariableBinding(new OID(text.getText()));
vb.setVariable(new OctetString("Right here, right now"));
pdu.add(vb);
//设置pdu动作
pdu.setType(PDU.SET);
//发送pdu获取信息并返回一个响应pdu
ResponseEvent response=snmp.send(pdu, target);
//提取响应pdu
PDU responsePdu=response.getResponse();
if(responsePdu!=null)
{
if(responsePdu.getErrorIndex()==responsePdu.noError&&responsePdu.getErrorStatus()==responsePdu.noError)
{
System.out.println(responsePdu);
}
else {
System.out.println("get error:" responsePdu.getErrorStatusText());
}
但他始终报错
那么set一个oid该怎么做呢?
网友回复:高手.高手快出现
网友回复:报什么错

这有篇
http://blog.csdn.net/stevexk/archive/2007/09/15/1786267.aspx
网友回复:get response error
我没写完整,报这个错是因为responsePdu==null
网友回复:高手呢?出来帮我解决下问题
网友回复:搞定了也.代码如下.呵呵无私奉献:
try {
//建立一个udp地址,被治理设备的udp
String ip="172.16.10.254";
Address targetAddress=GenericAddress.parse("udp:" ip "/161");
//建立一个snmp传输消息接口
TransportMapping transport=new DefaultUdpTransportMapping();
Snmp snmp=new Snmp(transport);
transport.listen();
//创建target
CommunityTarget target=new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
target.setRetries(1);//重复次数
target.setTimeout(5000);//超时
target.setVersion(SnmpConstants.version2c);//版本
//创建pdu,snmp协议的数据单元
PDU pdu=new PDU();
//变量绑定
VariableBinding vb=new VariableBinding(new OID(text.getText()));
pdu.add(vb);
//设置pdu动作;
pdu.setType(PDU.GETNEXT);
//发送pdu获取信息并返回一个响应pdu
ResponseEvent response=snmp.send(pdu, target);
//提取响应pdu
PDU responsePdu=response.getResponse();
//获取响应方的地址
Address peerAddress=response.getPeerAddress();
//分析响应pdu包
if(responsePdu!=null)
{
if(responsePdu.getErrorIndex()==responsePdu.noError&&responsePdu.getErrorStatus()==responsePdu.noError)
{
String pause=response.getResponse().getVariableBindings().toString();
String getvalue=pause.substring( pause.indexOf("= ") 2,pause.indexOf(']'));
String oid=pause.substring(pause.indexOf("VBS[") 2,pause.indexOf("=")-1);
System.out.println(responsePdu);
System.out.println(oid);
VariableBinding vb2=new VariableBinding(new OID(oid),new OctetString("aaaa"));
//pdu.clear();//用同一个pdu就必须要把相同的绑定清除掉
PDU pdu2=new PDU();
pdu2.add(vb2);
pdu2.setType(PDU.SET);
response=snmp.send(pdu2, target);
responsePdu=response.getResponse();
System.out.println(responsePdu);
}
else {
System.out.println("get error:" responsePdu.getErrorStatusText());
}
}
else {
System.out.println("get response error");
}
//snmp.close();
} catch (IOException e) {
e.printStackTrace();

}
网友回复:对了.上面的snmp.close()应该用的哈.
网友回复:该回复于2008-05-01 06:27:08被版主删除
网友回复:该回复于2008-05-05 17:39:53被版主删除
网友回复:谢谢楼主的共享,请问假如要set的oid不是字符串,那应该如何绑定
关键字:snmp,set,问题,

相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面