SNMP开发问题
在SNMP开发种,发现不断读取值,系统内存会不断增加,不知道做过相关开发的朋友是否有遇到类似的问题。。。。。。 问题点数:200、回复次数:19Top
1 楼flinming(flinming)回复于 2006-03-16 10:03:03 得分 0
//////////////////////////////////////////////////////////////////////////
// SNMP初始化 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::Snmp_Init()
{
if(SnmpStartup(&m_nMajorVersion,&m_nMinorVersion,&m_nLevel,&m_nTranslateMode,
&m_nRetransmitMode) != SNMPAPI_SUCCESS)
{
AfxMessageBox("initilization failure");
}
//设置传输模式
if(SnmpSetTranslateMode(SNMPAPI_UNTRANSLATED_V2)!=SNMPAPI_SUCCESS)
AfxMessageBox("SetTranslateMode failure");
//设置重传模式
if(SnmpSetRetransmitMode(SNMPAPI_ON)!=SNMPAPI_SUCCESS)
AfxMessageBox("SetRetransmitMode failure");
m_SessionID = FALSE;
CString lpstr;
lpstr = "1.3.6.1.2.1.1.1.0";
strcpy(m_initOid[0],lpstr);
lpstr = "1.3.6.1.2.1.1.2.0";
strcpy(m_initOid[1],lpstr);
lpstr = "1.3.6.1.2.1.1.3.0";
strcpy(m_initOid[2],lpstr);
lpstr = "1.3.6.1.2.1.1.4.0";
strcpy(m_initOid[3],lpstr);
lpstr = "1.3.6.1.2.1.1.5.0";
strcpy(m_initOid[4],lpstr);
lpstr = "1.3.6.1.2.1.1.6.0";
strcpy(m_initOid[5],lpstr);
lpstr = "1.3.6.1.2.1.2.1.0";
strcpy(m_initOid[6],lpstr);
}
//////////////////////////////////////////////////////////////////////////
// SNMP结束初始化 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::Snmp_Uninit()
{
if(m_Session != NULL)
SnmpClose(m_Session);
SnmpCleanup();
}
//////////////////////////////////////////////////////////////////////////
// 创建会话 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::CreateSession (HWND hWnd,UINT wMsg)
{
if((m_Session = SnmpCreateSession(hWnd,wMsg,NULL,NULL)) == SNMPAPI_FAILURE)
AfxMessageBox("CreateSession failure");
}
//////////////////////////////////////////////////////////////////////////
// 创建变量捆绑列表 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::CreateVbl(LPCSTR name,smiLPVALUE pvalue)
{
smiOID m_Oid;
if(SnmpStrToOid(name,&m_Oid)==SNMPAPI_FAILURE)
AfxMessageBox("CreateVbl failure");
//创建变量捆绑列表
m_Hvbl = SnmpCreateVbl(m_Session,&m_Oid,pvalue);
if(m_Hvbl== SNMPAPI_FAILURE)
AfxMessageBox("CreateVbl failure");
}
//////////////////////////////////////////////////////////////////////////
// 添加到变量绑定列表 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::SetVbl(LPCSTR name)
{
smiOID m_Oid;
if(SnmpStrToOid(name,&m_Oid) == SNMPAPI_FAILURE)
AfxMessageBox("SetVbl failure--oid");
//添加到变量绑定列表
if(SnmpSetVb(m_Hvbl,0,&m_Oid,NULL) == SNMPAPI_FAILURE)
AfxMessageBox("SetVbl failure");
}
//////////////////////////////////////////////////////////////////////////
// 创建协议数据单元 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::CreatePdu(smiINT PDU_type,smiINT32 request_id,
smiINT error_status,smiINT error_index)
{
//创建协议数据单元
m_Hpdu = SnmpCreatePdu(m_Session,PDU_type,request_id,error_status,error_index,m_Hvbl);
if(m_Hpdu == SNMPAPI_FAILURE)
AfxMessageBox("CreatePdu failure");
else if (error_status > 0)
AfxMessageBox("Error: error_status=%d, error_index=%d\n",
error_status, error_index);
}
//////////////////////////////////////////////////////////////////////////
// SNMP发送函数
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::SnmpSend(LPCSTR address,const char * community)
{
HSNMP_ENTITY hAgent;
//创建实体句柄
if((hAgent = SnmpStrToEntity(m_Session,address)) == SNMPAPI_FAILURE)
AfxMessageBox("SendMsg failure--entity");
smiOCTETS contextName;
contextName.ptr = (unsigned char *)community;
contextName.len = lstrlen(community);
HSNMP_CONTEXT hView;
//创建上下文句柄
if((hView = SnmpStrToContext(m_Session,&contextName))==SNMPAPI_FAILURE)
AfxMessageBox("SendMsg failure--context");
if(SnmpSendMsg(m_Session,NULL,hAgent,hView,m_Hpdu)==SNMPAPI_FAILURE)
AfxMessageBox("SendMsg failure");
if(m_Hpdu != NULL)
SnmpFreePdu(m_Hpdu);
if(m_Hvbl!=NULL)
SnmpFreeVbl(m_Hvbl);
if(hAgent!=NULL)
SnmpFreeEntity(hAgent);
if(hView!=NULL)
SnmpFreeContext(hView);
}Top
2 楼flinming(flinming)回复于 2006-03-16 10:03:22 得分 0
//////////////////////////////////////////////////////////////////////////
// SNMP接收消息 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::SnmpReceive()
{
HSNMP_ENTITY srcEntity;
HSNMP_ENTITY dstEntity;
HSNMP_CONTEXT context;
HSNMP_PDU pPdu;
smiINT PDU_type;
smiINT32 request_id;
smiINT error_status;
smiINT error_index;
HSNMP_VBL varbindlist;
smiOID pOid;
if(SnmpRecvMsg(m_Session,&srcEntity,&dstEntity,&context,&pPdu) != SNMPAPI_SUCCESS)
AfxMessageBox("receive failure--recv");
//提取协议数据单元
if(SnmpGetPduData(pPdu,&PDU_type,&request_id,&error_status,&error_index,&varbindlist)!=SNMPAPI_SUCCESS)
AfxMessageBox("receive failure--getpdu");
if((nCount = SnmpCountVbl(varbindlist))==SNMPAPI_FAILURE)
AfxMessageBox("Count Vbl Error");
for(int i = 0;i < nCount;i++)
{
if(SnmpGetVb(varbindlist,i + 1,&pOid,m_Value[i]) != SNMPAPI_SUCCESS)
AfxMessageBox("receive failure--getvb");
if(SnmpOidToStr(&pOid,100,m_sOid[i])==SNMPAPI_FAILURE)//获取变量名
AfxMessageBox("Get Vb Error");
}
SnmpFreeEntity(srcEntity);
SnmpFreeEntity(dstEntity);
SnmpFreeContext(context);
SnmpFreePdu(pPdu);
SnmpFreeVbl(varbindlist);
}
//////////////////////////////////////////////////////////////////////////
// 开始读取 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::SnmpStartRead(CString m_EquipIp)
{
if(m_SessionID == FALSE)
{
CreateSession(m_hWnd,SNMP_MSG);
m_SessionID = TRUE;
}
if(m_HandSendFlag == 0)//读系统
{
CreateVbl(m_initOid[0],NULL);
for(int i = 1;i <= 6;i++)
SetVbl(m_initOid[i]);
}
CreatePdu(SNMP_PDU_GET,1000,NULL,NULL);
SnmpSend(m_EquipIp,"public");
}
//////////////////////////////////////////////////////////////////////////
// 接收消息函数 //
//////////////////////////////////////////////////////////////////////////
LRESULT CSnmpManageDlg::OnRecv(WPARAM wparam,LPARAM lparam)
{
CString lpstr,lpstr1;
lpstr.Format("w:%d,p:%d",wparam,lparam);
SetWindowText(lpstr);
int nIpin;
CString strIp;
CString strTemp;
SnmpReceive();
for(int i = 0;i < nCount;i++)
{
switch(m_Value[i]->syntax)
{
case SNMP_SYNTAX_INT:
{
smiINT sNumber;
sNumber = m_Value[i]->value.sNumber;
nIpin = sNumber;
memset(&m_ReadValue[i],NULL,500);
wsprintf(m_ReadValue[i],"%d",sNumber);
}
break;
case SNMP_SYNTAX_UINT32:
case SNMP_SYNTAX_CNTR32:
case SNMP_SYNTAX_GAUGE32:
case SNMP_SYNTAX_TIMETICKS:
{
smiUINT32 uNumber;
uNumber = m_Value[i]->value.uNumber;
nIpin = uNumber;
memset(&m_ReadValue[i],NULL,500);
wsprintf(m_ReadValue[i],"%d",uNumber);
}
break;
case SNMP_SYNTAX_CNTR64:
{
smiCNTR64 hNumber;
hNumber = m_Value[i]->value.hNumber;
}
break;
case SNMP_SYNTAX_OCTETS:
case SNMP_SYNTAX_OPAQUE:
case SNMP_SYNTAX_NSAPADDR:
{
memset(&m_ReadValue[i],NULL,500);
memcpy(m_ReadValue[i],(char *)m_Value[i]->value.string.ptr,m_Value[i]->value.string.len);
}
break;
case SNMP_SYNTAX_IPADDR:
{
strIp.Format("%d",*m_Value[i]->value.string.ptr);
strIp+=".";
strTemp.Format("%d",*(m_Value[i]->value.string.ptr + 1));
strIp+=strTemp;
strIp+=".";
strTemp.Format("%d",*(m_Value[i]->value.string.ptr + 2));
strIp+=strTemp;
strIp+=".";
strTemp.Format("%d",*(m_Value[i]->value.string.ptr + 3));
strIp+=strTemp;
memset(&m_ReadValue[i],NULL,500);
strcpy(m_ReadValue[i],strIp);
}
break;
case SNMP_SYNTAX_OID:
{
smiOID oid;
oid = m_Value[i]->value.oid;
memset(&m_ReadValue[i],NULL,500);
SnmpOidToStr(&oid,30,m_ReadValue[i]);
}
break;
case SNMP_SYNTAX_NULL:
case SNMP_SYNTAX_NOSUCHOBJECT:
case SNMP_SYNTAX_NOSUCHINSTANCE:
case SNMP_SYNTAX_ENDOFMIBVIEW:
{
smiBYTE empty;
empty = m_Value[i]->value.empty;
lpstr = "No Value Returned";
memset(&m_ReadValue[i],NULL,500);
strcpy(m_ReadValue[i],lpstr);
}
break;
default:
break;
}
if(strcmp(m_sOid[i],m_initOid[0]) == 0)
m_sDesr.SetWindowText(CString(m_ReadValue[i]));
else if (strcmp(m_sOid[i],m_initOid[1]) == 0)
m_sSysOid.SetWindowText(CString(m_ReadValue[i]));
else if (strcmp(m_sOid[i],m_initOid[2]) == 0)
m_sSysTime.SetWindowText(CString(m_ReadValue[i]));
else if (strcmp(m_sOid[i],m_initOid[3]) == 0)
m_sysContact.SetWindowText(m_ReadValue[i]);
else if (strcmp(m_sOid[i],m_initOid[4]) == 0)
m_sName.SetWindowText(m_ReadValue[i]);
else if (strcmp(m_sOid[i],m_initOid[5]) == 0)
m_sysLocation.SetWindowText(m_ReadValue[i]);
else if (strcmp(m_sOid[i],m_initOid[6]) == 0)
{
//SetWindowText(m_ReadValue[i]);
}
}
}
return 0;
}Top
3 楼fisker0303(天塌了,地陷了,小花狗不见了.)回复于 2006-03-16 11:33:40 得分 10
好长啊,先关注下...Top
4 楼LongLongAgoImBoy(ThereIsAMe)回复于 2006-03-16 12:15:26 得分 10
好啊,学习学习!Top
5 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2006-03-16 13:14:06 得分 50
用的WinSNMP 吧,看对应的时候资源什么的都释放了……Top
6 楼flinming(flinming)回复于 2006-03-16 14:20:31 得分 0
WinSNMP?看看去。。。好用不?Top
7 楼independently(我是风筝高高飞)回复于 2006-03-16 14:24:07 得分 0
学习中~Top
8 楼flinming(flinming)回复于 2006-03-16 14:40:43 得分 0
晕倒,我用的就是winSNMP,只是不知道那边资源没有释放,结果导致内存一直增加Top
9 楼striking(庸人自扰)回复于 2006-03-16 17:26:40 得分 10
good good study..~~Top
10 楼flinming(flinming)回复于 2006-03-16 18:33:25 得分 0
不是吧,贴在发了差不多一个白天了,怎么都没有人解决问题?
牛人都到哪里去了。。。。。。。。。。。。。。。Top
11 楼lps(lps)回复于 2006-03-16 20:30:11 得分 50
我做网络管理,lipinshengxp@hotmail.com 欢迎楼主和我交流Top
12 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2006-03-16 20:55:35 得分 0
^_^,我说的就是指你用的是WinSnmp啊……
对应的资源还是要你自己检查一下,顺便看一下MSDN等文档,看是否提到对应的API需要注意释放资源什么的没
Top
13 楼najzni(najzni)回复于 2006-03-16 23:10:34 得分 70
你的资源没有释放。使用的资源要成对释放。
比如这里if(SnmpRecvMsg(m_Session,&srcEntity,&dstEntity,&context,&pPdu) != ,
那么你要有对应的SNMPAPI_STATUS SnmpFreePdu(
HSNMP_PDU PDU // handle to the PDU to free
);来释放pPdu。
你注意看看winsnmp中的变量,凡是像pPdu这种,通过某种操作获取了数据后,winsnmp都为pPdu分配了内存,而这个内存winsnmp不会主动给你释放,你必须显示调用相应的函数来释放winsnmp分配的内存。
Top
14 楼najzni(najzni)回复于 2006-03-16 23:16:38 得分 0
你可以参考一下msdn中的snmputil那个例子。应该是你程序中的某些winsnmp变量没释放完。Top
15 楼flinming(flinming)回复于 2006-03-17 14:32:02 得分 0
问题解决。。。。。。。。。Top
16 楼flinming(flinming)回复于 2006-03-17 14:32:59 得分 0
char m_Path[MAX_PATH];
char m_initOid[100][100];
char m_sOid[100][100];
smiVALUE m_Value[100];
char m_ReadValue[100][500];
smiOID m_Oid[10];
//////////////////////////////////////////////////////////////////////////
BOOL m_SessionID;
int nCount;
HSNMP_SESSION m_Session;
HSNMP_VBL m_Hvbl;
HSNMP_PDU m_Hpdu;
smiUINT32 m_nMajorVersion,m_nMinorVersion,m_nLevel,m_nTranslateMode;
smiUINT32 m_nRetransmitMode;
HSNMP_ENTITY hAgent;
HSNMP_CONTEXT hView;
smiOCTETS contextName;
HSNMP_PDU pPdu;
HSNMP_VBL varbindlist;
//////////////////////////////////////////////////////////////////////////
// 读取配置 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::Read_Configure()
{
CString lpstr;
lpstr = "1.3.6.1.2.1.1.1.0";
strcpy(m_initOid[0],lpstr);
lpstr = "1.3.6.1.2.1.1.2.0";
strcpy(m_initOid[1],lpstr);
lpstr = "1.3.6.1.2.1.1.3.0";
strcpy(m_initOid[2],lpstr);
lpstr = "1.3.6.1.2.1.1.4.0";
strcpy(m_initOid[3],lpstr);
lpstr = "1.3.6.1.2.1.1.5.0";
strcpy(m_initOid[4],lpstr);
lpstr = "1.3.6.1.2.1.1.6.0";
strcpy(m_initOid[5],lpstr);
lpstr = "1.3.6.1.2.1.2.1.0";
strcpy(m_initOid[6],lpstr);
//////////////////////////////////////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////
// SNMP初始化 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::Snmp_Init()
{
if(SnmpStartup(&m_nMajorVersion,&m_nMinorVersion,&m_nLevel,&m_nTranslateMode,
&m_nRetransmitMode) != SNMPAPI_SUCCESS)
{
AfxMessageBox("initilization failure");
}
//设置传输模式
if(SnmpSetTranslateMode(SNMPAPI_UNTRANSLATED_V2)!=SNMPAPI_SUCCESS)
AfxMessageBox("SetTranslateMode failure");
//设置重传模式
if(SnmpSetRetransmitMode(SNMPAPI_ON)!=SNMPAPI_SUCCESS)
AfxMessageBox("SetRetransmitMode failure");
m_SessionID = FALSE;
hAgent = NULL;
hView = NULL;
}
//////////////////////////////////////////////////////////////////////////
// SNMP结束初始化 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::Snmp_Uninit()
{
if(hAgent!=NULL)
SnmpFreeEntity(hAgent);
if(hView!=NULL)
SnmpFreeContext(hView);
if(m_Session != NULL)
SnmpClose(m_Session);
SnmpCleanup();
}
//////////////////////////////////////////////////////////////////////////
// 创建会话 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::CreateSession (HWND hWnd,UINT wMsg)
{
if((m_Session = SnmpCreateSession(hWnd,wMsg,NULL,NULL)) == SNMPAPI_FAILURE)
AfxMessageBox("CreateSession failure");
}
//////////////////////////////////////////////////////////////////////////
// 创建变量捆绑列表 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::CreateVbl(LPCSTR name,smiLPVALUE pvalue,int m_Num)
{
smiOID m_Oid;
if(SnmpStrToOid(name,&m_Oid)==SNMPAPI_FAILURE)
AfxMessageBox("CreateVbl failure");
//创建变量捆绑列表
m_Hvbl = SnmpCreateVbl(m_Session,&m_Oid,pvalue);
if(m_Hvbl== SNMPAPI_FAILURE)
AfxMessageBox("CreateVbl failure");
if(SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiLPOPAQUE)&m_Oid) != SNMPAPI_SUCCESS)
AfxMessageBox("freedescriptor failure");
}
//////////////////////////////////////////////////////////////////////////
// 添加到变量绑定列表 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::SetVbl(LPCSTR name,int m_Num)
{
smiOID m_Oid;
if(SnmpStrToOid(name,&m_Oid) == SNMPAPI_FAILURE)
AfxMessageBox("SetVbl failure--oid");
//添加到变量绑定列表
if(SnmpSetVb(m_Hvbl,0,&m_Oid,NULL) == SNMPAPI_FAILURE)
AfxMessageBox("SetVbl failure");
if(SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiLPOPAQUE)&m_Oid) != SNMPAPI_SUCCESS)
AfxMessageBox("freedescriptor failure");
}Top
17 楼flinming(flinming)回复于 2006-03-17 14:33:14 得分 0
//////////////////////////////////////////////////////////////////////////
// 创建协议数据单元 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::CreatePdu(smiINT PDU_type,smiINT32 request_id,
smiINT error_status,smiINT error_index)
{
//创建协议数据单元
m_Hpdu = SnmpCreatePdu(m_Session,PDU_type,request_id,error_status,error_index,m_Hvbl);
if(m_Hpdu == SNMPAPI_FAILURE)
AfxMessageBox("CreatePdu failure");
else if (error_status > 0)
AfxMessageBox("Error: error_status=%d, error_index=%d\n",
error_status, error_index);
}
//////////////////////////////////////////////////////////////////////////
// SNMP发送函数
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::SnmpSend(LPCSTR address,const char * community)
{
//创建实体句柄
if(hAgent == NULL)
if((hAgent = SnmpStrToEntity(m_Session,address)) == SNMPAPI_FAILURE)
AfxMessageBox("SendMsg failure--entity");
if(hView == NULL)
{
contextName.ptr = (unsigned char *)community;
contextName.len = lstrlen(community);
//创建上下文句柄
if((hView = SnmpStrToContext(m_Session,&contextName)) == SNMPAPI_FAILURE)
AfxMessageBox("SendMsg failure--context");
}
if(SnmpSendMsg(m_Session,NULL,hAgent,hView,m_Hpdu) == SNMPAPI_FAILURE)
AfxMessageBox("SendMsg failure");
}
//////////////////////////////////////////////////////////////////////////
// 开始读取 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::SnmpStartRead(CString m_EquipIp)
{
if(m_SessionID == FALSE)
{
CreateSession(m_hWnd,SNMP_MSG);
m_SessionID = TRUE;
CreateVbl(m_initOid[0],NULL,0);
for(int i = 1;i <= 6;i++)
SetVbl(m_initOid[i],i);
CreatePdu(SNMP_PDU_GET,0,NULL,NULL);
}
SnmpSend(m_EquipIp,"public");
}
//////////////////////////////////////////////////////////////////////////
// SNMP接收消息 //
//////////////////////////////////////////////////////////////////////////
void CSnmpManageDlg::SnmpReceive()
{
smiINT PDU_type;
smiINT32 request_id;
smiINT error_status;
smiINT error_index;
smiOID pOid;
//if(SnmpRecvMsg(m_Session,&srcEntity,&dstEntity,&context,&pPdu) != SNMPAPI_SUCCESS)
if(SnmpRecvMsg(m_Session,NULL,NULL,NULL,&pPdu) != SNMPAPI_SUCCESS)
AfxMessageBox("receive failure--recv");
//提取协议数据单元
if(SnmpGetPduData(pPdu,&PDU_type,&request_id,&error_status,&error_index,&varbindlist)!=SNMPAPI_SUCCESS)
AfxMessageBox("receive failure--getpdu");
if((nCount = SnmpCountVbl(varbindlist))==SNMPAPI_FAILURE)
AfxMessageBox("Count Vbl Error");
for(int i = 0;i < nCount;i++)
{
//ID从1开始
if(SnmpGetVb(varbindlist,i + 1,&pOid,&m_Value[i]) != SNMPAPI_SUCCESS)
AfxMessageBox("receive failure--getvb");
if(SnmpOidToStr(&pOid,100,m_sOid[i]) == SNMPAPI_FAILURE)//获取变量名
AfxMessageBox("Get Vb Error");
//一定要加释放
SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiOCTETS *)&pOid);
}
//一定要加释放
SnmpFreeVbl(varbindlist);
SnmpFreePdu(pPdu);
}
//////////////////////////////////////////////////////////////////////////
// 接收消息函数 //
//////////////////////////////////////////////////////////////////////////
LRESULT CSnmpManageDlg::OnRecv(WPARAM wparam,LPARAM lparam)
{
int nIpin;
CString strIp,strTemp,lpstr;
if(wparam)
return 0;
SnmpReceive();
for(int i = 0;i < nCount;i++)
{
switch(m_Value[i].syntax)
{
case SNMP_SYNTAX_INT:
{
smiINT sNumber;
sNumber = m_Value[i].value.sNumber;
nIpin = sNumber;
memset(&m_ReadValue[i],NULL,500);
wsprintf(m_ReadValue[i],"%d",sNumber);
}
break;
case SNMP_SYNTAX_UINT32:
case SNMP_SYNTAX_CNTR32:
case SNMP_SYNTAX_GAUGE32:
case SNMP_SYNTAX_TIMETICKS:
{
smiUINT32 uNumber;
uNumber = m_Value[i].value.uNumber;
nIpin = uNumber;
memset(&m_ReadValue[i],NULL,500);
wsprintf(m_ReadValue[i],"%d",uNumber);
}
break;
case SNMP_SYNTAX_CNTR64:
{
smiCNTR64 hNumber;
hNumber = m_Value[i].value.hNumber;
}
break;
case SNMP_SYNTAX_OCTETS:
case SNMP_SYNTAX_OPAQUE:
case SNMP_SYNTAX_NSAPADDR:
{
memset(&m_ReadValue[i],NULL,500);
memcpy(m_ReadValue[i],(char *)m_Value[i].value.string.ptr,m_Value[i].value.string.len);
}
break;
case SNMP_SYNTAX_IPADDR:
{
strIp.Format("%d",*m_Value[i].value.string.ptr);
strIp+=".";
strTemp.Format("%d",*(m_Value[i].value.string.ptr + 1));
strIp+=strTemp;
strIp+=".";
strTemp.Format("%d",*(m_Value[i].value.string.ptr + 2));
strIp+=strTemp;
strIp+=".";
strTemp.Format("%d",*(m_Value[i].value.string.ptr + 3));
strIp+=strTemp;
memset(&m_ReadValue[i],NULL,500);
strcpy(m_ReadValue[i],strIp);
}
break;
case SNMP_SYNTAX_OID:
{
smiOID oid;
oid = m_Value[i].value.oid;
memset(&m_ReadValue[i],NULL,500);
SnmpOidToStr(&oid,30,m_ReadValue[i]);
}
break;
case SNMP_SYNTAX_NULL:
case SNMP_SYNTAX_NOSUCHOBJECT:
case SNMP_SYNTAX_NOSUCHINSTANCE:
case SNMP_SYNTAX_ENDOFMIBVIEW:
{
smiBYTE empty;
empty = m_Value[i].value.empty;
lpstr = "No Value Returned";
memset(&m_ReadValue[i],NULL,500);
strcpy(m_ReadValue[i],lpstr);
}
break;
default:
break;
}
//一定要加释放
SnmpFreeDescriptor(m_Value[i].syntax, (smiOCTETS *)&m_Value[i].value.oid);
if(strcmp(m_sOid[i],m_initOid[0]) == 0)
m_sDesr.SetWindowText(CString(m_ReadValue[i]));
else if (strcmp(m_sOid[i],m_initOid[1]) == 0)
m_sSysOid.SetWindowText(CString(m_ReadValue[i]));
else if (strcmp(m_sOid[i],m_initOid[2]) == 0)
m_sSysTime.SetWindowText(CString(m_ReadValue[i]));
else if (strcmp(m_sOid[i],m_initOid[3]) == 0)
m_sysContact.SetWindowText(m_ReadValue[i]);
else if (strcmp(m_sOid[i],m_initOid[4]) == 0)
m_sName.SetWindowText(m_ReadValue[i]);
else if (strcmp(m_sOid[i],m_initOid[5]) == 0)
m_sysLocation.SetWindowText(m_ReadValue[i]);
else if (strcmp(m_sOid[i],m_initOid[6]) == 0)
{
//SetWindowText(m_ReadValue[i]);
}
}
return 0;
}Top
18 楼flinming(flinming)回复于 2006-03-17 14:35:15 得分 0
以上是解决的代码,提供大家参考。。。。。。。
Top
19 楼MyPro(活到老,学到老!)回复于 2006-03-23 13:08:48 得分 0
长知识!公司正要让写一个SNMP相关的东西,可以参考一下啊!现在这方面成系统的东西太少了,简直无从下手!Top




