大神们帮帮忙!万分感谢!
java吧
全部回复
仅看楼主
level 3
阳雪松 楼主
有一段C++程序,是一个实现trap接收的进程,想转换成Java的。
程序初始化部分初始化辅助线程:
CWinThread *pThread;
pThread = AfxBeginThread(receive_trap,this);
辅助线程的实现:
uint receive_trap(LPVOID pParam)
{
int trap_port;
trap_port = 162;
int status;
Snmp snmp(status); //打开一个SNMP进程
OidCollection oidc; //设定要接收的trap类型,选择接收管理者关注的trap信号,其他的trap信号忽略
TargetCollection Targetc; //设定所接收trap的来源地址
CNotifyEventQueue::set_listen_port(trap_port);
//设定监听端口号为162(SNMP的管理端口)
status = snmp.notify_register(oidc, targetc, callback, NULL);
//注册接收trap,如果有注册的trap到来,则启动回调函数处理
If(status == SNMP_CLASS_SUCCESS)
{
while(1)
snmp.eventListHolder->SNMPProcessEvents();
return 0;
}
}
回调函数中定义针对trap的处理:
void callback(int reason, Snmp *snmp, Pdu &pdu, SnmpTarget &target, void *cd)
{
//将trap信息存储在一个pdu结构中,利用AdventNet SNMP类的方法和属性解析trap信息
}
2013年12月02日 13点12分 1
level 15
有问题为什么不先问问隔壁C++吧呢?
2013年12月03日 06点12分 3
level 11
估计大概这样。照 API 手打的,也没用过 snmp,所以可能有差。
import org.snmp4j.*;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.transport.DefaultUdpTransportMapping;
class CWinThread extends Thread {
private static final int trap_port = 162;
public void run() {
Snmp snmp = new Snmp( new DefaultUdpTransportMapping( GenericAddress.parse("udp:127.0.0.1/" + trap_port) ) );
snmp.addCommandResponder(new CommandResponder() {
public synchronized void processPdu(CommandResponderEvent e) {
PDU command = e.getPDU();
// callback goes here
}
});
snmp.listen();
}
}
然后执行线程:
new CWinThread().start();
2013年12月03日 07点12分 4
万分感谢!万分感谢!
2013年12月03日 14点12分
1