Помогите с SNMP в C ++? - PullRequest
       40

Помогите с SNMP в C ++?

1 голос
/ 13 июля 2011

Я пытался создать приложение на C ++, используя WinSNMP, и, хотя я медленно прогрессирую, я продолжаю сталкиваться с проблемами. До сих пор моя программа пытается запустить, создать и открыть сеанс SNMP, установить порт, а затем пытается прослушать этот порт, а затем завершить работу. Он распечатывает значения всех переменных, к которым он обращается, поэтому я могу отслеживать все в программе. Значения, которые я получаю сейчас, не имеют никакого смысла, некоторые из них повторяются для разных переменных, которые не имеют отношения, а некоторые остаются нулевыми или равными 0, даже если им даны значения и они не изменены. Я застрял и не знаю, что с этим делать или что делать дальше, чтобы собрать программу. Мой код выглядит следующим образом:

#include <WinSnmp.h>
#include <stdio.h>
#define MY_BUFSIZE 1024 // Buffer size for console window titles.

smiUINT32  majorVers;
smiUINT32  minorVers;
smiUINT32  nLevel;
smiUINT32  translateMode;
smiUINT32  retranslateMode;

UINT       msgNum=1;
UINT       port = 80;

HWND       window;

char oldWindowTitle[MY_BUFSIZE];

HSNMP_ENTITY      entity;
SNMPAPI_STATUS    status;
SNMPAPI_CALLBACK  callBackNum;


void Startup(){

    //Starting the snmp session
    SnmpStartup(&majorVers, &minorVers, &nLevel, &translateMode, &retranslateMode);

    printf( "Major Version:    %i \n"
            "Minor Version:    %i \n"
            "nLevel:           %i \n"
            "Translate Mode:   %i \n"
            "Retranslate Mode: %i \n\n", 
            (majorVers, minorVers, nLevel, translateMode, retranslateMode));

    GetConsoleTitle((LPWSTR)oldWindowTitle, MY_BUFSIZE);
    window = FindWindow(NULL, (LPCWSTR)oldWindowTitle);

}

void CreateSession(){

    SnmpCreateSession(window,msgNum,callBackNum,NULL);
    printf("Create session returns: %i \n\n", SnmpCreateSession(window,msgNum,callBackNum,NULL));
    printf( "Window:        %i\n"
            "msg num:       %i\n"
            "Call Back num: %i\n\n",
            (window,msgNum,callBackNum));
}

void OpenSession(){
    SnmpOpen(window, msgNum);
    printf("Open session returns: %i\n\n", SnmpOpen(window, msgNum));

}

void SetPort(){
    SnmpSetPort(entity,port);
    printf( "Entity: %i\n"
            "Port:   %i\n\n",
            (entity,port));
}

void Listen(){
    SnmpListen(entity,status);
    printf( "Entity: %i\n"
            "Status: %i\n\n",
            (entity,status));
}
int main(){

    Startup();
    CreateSession();
    OpenSession();
    SetPort();
    Listen();
    SnmpCleanup();

}

Значения, которые он возвращает, следующие:

        Major Version:    1
        Minor Version:    4320440
        nLevel:           4320760
        Translate Mode:   4320628
        Retranslate Mode: 1358752

        Create Session returns:  2

        Window:        0
        msg num:       4320436
        Call Back num: 4320760

        Open Session returns:  4

        Entity:   80
        Port:     4320444

        Entity:   0
        Status:   4320444

Я потерян здесь. любой совет / помощь?

обратите внимание, что возвращаемые значения обычно разные / случайные каждый раз, за ​​исключением однозначных и двузначных чисел, которые являются постоянными.

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

В printf передаются только два аргумента: одна строка формата и retranslateMode.Избавьтесь от скобок вокруг переменных в вызове, и они должны работать так, как вы ожидаете.

Справочная информация: выражение (a, b) оценивает a, отбрасывает результат, а затем выдает b.Одним из мест, где полезно применять оператор запятой , является код типа ++i, ++j in для циклов.

0 голосов
/ 14 июля 2011
printf( "Major Version:    %i \n"
        "Minor Version:    %i \n"
        "nLevel:           %i \n"
        "Translate Mode:   %i \n"
        "Retranslate Mode: %i \n\n", 
        (majorVers, minorVers, nLevel, translateMode, retranslateMode));

Это неправильно.Аналогично для других применений printf.Я предлагаю вам выбрать безопасную альтернативу, если вы не знакомы с ней.

...