高手进 关于 SNMP
发送没问题,接受部分从一开始就没有值!
bool Receive(HSNMP_VBL &hVbl)
{
HSNMP_ENTITY hSrcEntity=(HSNMP_ENTITY)NULL;
HSNMP_ENTITY hDestEntity=(HSNMP_ENTITY)NULL;
HSNMP_CONTEXT hContext=(HSNMP_CONTEXT)NULL;
HSNMP_PDU hPdu=(HSNMP_PDU)NULL;
smiOID oid1;
smiVALUE vaule;
DWORD index,Counts;
char* outoid=NULL;
//接收消息
if(SnmpRecvMsg(hSession,&hSrcEntity,&hDestEntity,&hContext,&hPdu)==SNMPAPI_FAILURE)
{
CString strError;
switch (SnmpGetLastError(hSession))
{
case SNMPAPI_NOOP:
strError= "Session当前没有消息在队列中! ";
break;
case SNMPAPI_TL_INVALID_PARAM:
strError= "A network transport layer function call received an invalid input parameter ";
default:
break;
}
MessageBox(NULL, "消息接收失败! "+strError, "test ",MB_OK);
return FALSE;
}
smiINT PDU_type;
smiINT error_status;
smiINT error_index;
//提取数据报
if(SnmpGetPduData(hPdu,&PDU_type,NULL,&error_status,&error_index,&hVbl)==SNMPAPI_FAILURE)
{
MessageBox(NULL, "SnmpGetPduData failed ", "提示 ",MB_OK);
return FALSE;
}
//计算返回列表数目
Counts=SnmpCountVbl(hVbl);
for( index = 0; index <= Counts; index++ )
{
//取得绑定表中的值
SnmpGetVb(hVbl,Counts,&oid1,&vaule);
memset( outoid, 0, MAX_BUFFER_LEN );
SnmpOidToStr(&oid1,MAX_BUFFER_LEN,outoid);
}
//释放句柄
SnmpFreeEntity(hSrcEntity);
SnmpFreeEntity(hDestEntity);
SnmpFreePdu(hPdu);
SnmpFreeVbl(hVbl);
SnmpCleanup();
return TRUE;
}
};
有人指出:
LPHSNMP_ENTITY recsrcEntity=0;
LPHSNMP_ENTITY recdisEntity=0;
LPHSNMP_CONTEXT reccontext=0;
LPHSNMP_PDU recPDU=0;
SNMPAPI_STATUS recStat=SnmpRecvMsg(Session,recsrcEntity,recdisEntity,reccontext,recPDU); //接受消息
是不是应该建立一个实体类型的变量,然后把引用传递给函数?
我对此还不是很明白 请详细告之!
[解决办法]
楼主的签名还真是强啊