有一段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信息
}
程序初始化部分初始化辅助线程:
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信息
}