java吧 关注:1,224,526贴子:12,679,858
  • 4回复贴,共1

大神们帮帮忙!万分感谢!

只看楼主收藏回复

有一段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信息
}


IP属地:辽宁1楼2013-12-02 21:02回复
    有问题为什么不先问问隔壁C++吧呢?


    IP属地:河北3楼2013-12-03 14:56
    回复
      估计大概这样。照 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();


      4楼2013-12-03 15:18
      收起回复