哪位朋友有用c++ builder 2010做过snmp的代码或例子吗?

全站显示林林 2012-11-15 03:49:07
哪位朋友有用c++ builder 2010做过snmp的代码或例子吗?哭求教育,求示范!做不出来搜不到。。。哪位能帮下,在下五体投地,感激涕零! MIBGet取个oid值都取不到。
...全文
465 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
BORLANDSUN 2012-12-21
  • 打赏
  • 举报
回复
哼哼,我写的代码多了去了,基于CB 2007的。楼主分开高点,我手把手教你。
zhangbao226 2012-12-11
  • 打赏
  • 举报
回复
void __fastcall TForm_NetM::WndProc(TMessage &Msg) { if (Msg.Msg == SNMP_MSG) { Receive(Msg); } //返回系统消息泵 TForm::Dispatch(&Msg); } //--------------------------------------------------------------------------- //处理接受到的snmp协议数据 void TForm_NetM::Receive(TMessage &Msg) { byte RecvBuf[1024]; memset(RecvBuf,0,1024); int nIpin; AnsiString strIp,strTemp,lpstr; 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); } 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); } 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],m_Value[i].value.string.ptr,m_Value[i].value.string.len); memcpy(RecvBuf,m_Value[i].value.string.ptr,m_Value[i].value.string.len); if(m_Value[i].value.string.len == 79) } } break; case SNMP_SYNTAX_IPADDR: { memset(&m_ReadValue[i],NULL,500); memcpy(m_ReadValue[i],m_Value[i].value.string.ptr,m_Value[i].value.string.len); memcpy(RecvBuf,m_Value[i].value.string.ptr,m_Value[i].value.string.len); 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: default: break; } //一定要加释放 SnmpFreeDescriptor(m_Value[i].syntax, (smiOCTETS *)&m_Value[i].value.oid); LPCSTR toid1 = "1.3.6.1.5.1.6.2.7.3.0"; if(strcmp(m_sOid[i],toid1) == 0) { AnsiString str = AnsiString(m_ReadValue[i]); } } return ; } //接受SNMP协议数据 void __fastcall TForm_NetM::SnmpReceive() { smiINT PDU_type; smiINT32 request_id; smiINT error_status; smiINT error_index; smiOID pOid; HSNMP_ENTITY srcEntity; // handle to the source entity HSNMP_ENTITY dstEntity; // handle to the target entity HSNMP_CONTEXT context; // handle to the context HSNMP_PDU PDU; // handle to the PDU SNMPAPI_STATUS ss = SnmpRecvMsg(m_Session,&srcEntity,&dstEntity,&context,&PDU); if(ss != SNMPAPI_SUCCESS) { return; RzStatusPane1->Caption = Dll_Lang_strGetLang("18","18101307"); } //提取协议数据单元 if(SnmpGetPduData(PDU,&PDU_type,&request_id,&error_status,&error_index,&varbindlist)!=SNMPAPI_SUCCESS) RzStatusPane2->Caption = Dll_Lang_strGetLang("18","18101308"); if((nCount = SnmpCountVbl(varbindlist))==SNMPAPI_FAILURE) RzStatusPane3->Caption = Dll_Lang_strGetLang("18","18101309"); for(int i = 0;i < nCount;i++) { //ID从1开始 if(SnmpGetVb(varbindlist,i + 1,&pOid,&m_Value[i]) != SNMPAPI_SUCCESS) ShowMessage( "receive failure--getvb "); if(SnmpOidToStr(&pOid,100,m_sOid[i]) == SNMPAPI_FAILURE)//获取变量名 ShowMessage( "Get Vb Error "); //一定要加释放 SnmpFreeDescriptor(SNMP_SYNTAX_OID,(smiOCTETS *)&pOid); } //一定要加释放 SnmpFreeVbl(varbindlist); SnmpFreePdu(pPdu); }
zhangbao226 2012-12-11
  • 打赏
  • 举报
回复
做过类似的一个工程,希望对你有帮助: .cpp文件: #include "WINSNMP.h" #pragma comment(lib,"WSNMP32.lib ") .h文件: 定义一个消息: #define SNMP_MSGrel WM_USER + 1990 //发送snmp void TForm_NetM::SendSnmp() { char* m_EquipIp = "127.0.0.1"; char* desIp = "192.168.1.1";//目的IP InitSnmp(); if((m_Session = SnmpCreateSession(this->Handle,SNMP_MSG,NULL,NULL)) == SNMPAPI_FAILURE) //会话句柄 ShowMessage( "CreateSession failure "); my_hWnd = SnmpStrToEntity(m_Session,m_EquipIp); //创建实体句柄 my_Wnd = SnmpStrToEntity(m_Session,desIp); //ve11光端机实体句柄 SnmpSetTimeout(my_hWnd,1);//这两个不太明白 SnmpSetRetry(my_hWnd,2); if(hView == NULL) { AnsiString community = "public"; contextName.len = community.Length(); contextName.ptr = community.c_str(); if((hView = SnmpStrToContext(m_Session,&contextName)) == SNMPAPI_FAILURE) //创建上下文句柄 ShowMessage( "SendMsg failure--context "); } smiVALUE sdhip; sdhip.syntax = 4; AnsiString sdhipstr = IntToStr(GXaddr); sdhip.value.string.ptr = sdhipstr.c_str(); sdhip.value.string.len = sdhipstr.Length(); AnsiString toid0 = "1.3.6.1.4.1.18.1.1.1.2." + IntToStr(GXaddr); char* toid1 = toid0.c_str(); char* toid9 = "1.3.6.1.4.1.18.4.1.0.2"; //alarm trap SNMPAPI_STATUS SS1 = SnmpStrToOid(toid1,&my_Oid1); smiVALUE ipaddr; ipaddr.syntax = SNMP_SYNTAX_OCTETS; ipaddr.value.string.ptr = ipaddrstr_ve11.c_str(); ipaddr.value.string.len = ipaddrstr_ve11.Length(); //m_hvbl=SnmpCreateVbl(session,&Oid,NULL);/*NULL表示该OID的值为空*/ m_Hvbl = SnmpCreateVbl(m_Session,&my_Oid1,NULL);//有的一些特殊的oid似乎需要跟一个地址 SNMPAPI_STATUS ss3 = SnmpCountVbl(m_Hvbl); SnmpSetVb(m_Hvbl,0,&my_Oid2,&ipaddr); //可以添加多一个oid m_Hpdu = SnmpCreatePdu(m_Session,SNMP_PDU_SET,0,NULL,NULL,m_Hvbl);//创建协议数据单元 if(m_Hpdu == SNMPAPI_FAILURE) ShowMessage( "CreatePdu failure "); SNMPAPI_STATUS ss = SnmpSendMsg(m_Session,my_hWnd,my_Wnd,hView,m_Hpdu);//ss有值就是发送成功了 } //初始化SNMP void __fastcall TForm_NetM::InitSnmp() { if(SnmpStartup(&m_nMajorVersion,&m_nMinorVersion,&m_nLevel,&m_nTranslateMode,&m_nRetransmitMode) != SNMPAPI_SUCCESS) { ShowMessage( "initilization failure "); } //设置传输模式 if(SnmpSetTranslateMode(SNMPAPI_UNTRANSLATED_V2)!=SNMPAPI_SUCCESS) ShowMessage( "SetTranslateMode failure "); //设置重传模式 if(SnmpSetRetransmitMode(SNMPAPI_ON)!=SNMPAPI_SUCCESS) ShowMessage( "SetRetransmitMode failure "); m_SessionID = FALSE; hAgent = NULL; hView = NULL; }
leiming4519 2012-12-11
  • 打赏
  • 举报
回复
同问啊?我也在利用C++builder开发snmp通信项目,通信搞不通啊!
全站显示林林 2012-11-21
  • 打赏
  • 举报
回复
求帮助哇!都没人帮下吗!
全站显示林林 2012-11-16
  • 打赏
  • 举报
回复
引用 1 楼 ShengFei01 的回复:
楼主熟悉socket编程吗?这里有很多协议HTTP, FTP的实现,SNMP先从这里借鉴吧: http://download.csdn.net/detail/geoff08zhang/4571358
完全看不懂。好像没用,也没提到snmp。。。。。。。。。
ShengFei01 2012-11-16
  • 打赏
  • 举报
回复
楼主熟悉socket编程吗?这里有很多协议HTTP, FTP的实现,SNMP先从这里借鉴吧: http://download.csdn.net/detail/geoff08zhang/4571358

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧