•  

ГлавнаяIndyЧастые вопросы по Indy → Вопрос по компоненту TidSNMP

Создано: 03.06.2014 20:09:49 · Исправлено: 03.06.2014 20:09:49 · Прочтений: 1031

Вопрос по компоненту TidSNMP. В MSDN пишут, что эта компонента не может использоваться для SetResponse. Т.е. используется эта компонента только для чтения параметров MIB. Как тогда передать значение для MIB?
У MSDN про Indy? Удивительно что MSDN вообще дала какой то ответ, в что я не верю :D
Спросите лучше у Google или хелп по Indy
Вот собственно что пишут:

!!! Does not use PDUSetRequest or PDUGetResponse.

ms-help://borland.bds4/indy10/frames.html?frmname=topic&frmfile=TIdSNMP.html

И всетаки вопрос остается, как реализовать отправку?
Вообщем проблема решилась!

Для выполнения операции чтения значения переменных MIB нужно:
Community:=public;
PDUType:=PDUGetRequest; //или PDUGetNextRequest
if SendQuery then Memo1.Lines.Add(Ok)
            else Memo1.Lines.Add(Err - +idSNMP1.Reply.ErrorStatus);


А для установки значения переменых MIB нужно:
Community:=private;
PDUType:=PDUSetRequest; //
MIBadd(1.3.4.6.1......,100,2); //где 2 - это установка передаваемого типа данных, в данном случае - Integer
if SendQuery then Memo1.Lines.Add(Ok)
            else Memo1.Lines.Add(Err - +idSNMP1.Reply.ErrorStatus);


Можно кстати преддать сразу несколько значений MIB одновременно:

Community:=private;
PDUType:=PDUSetRequest; //
MIBadd(1.3.4.6.1.....1,100,2); //где 2 - это установка передаваемого типа данных, в данном случае - Integer
MIBadd(1.3.4.6.1.....2,test,4); // 4 - String;
MIBadd(1.3.4.6.1.....3,10,2);

if SendQuery then Memo1.Lines.Add(Ok)
            else Memo1.Lines.Add(Err - +idSNMP1.Reply.ErrorStatus);


Для чтения нескольких значений MIB:
Community:=public;
PDUType:=PDUGetRequest; //
MIBadd(1.3.4.6.1.....1,); 
MIBadd(1.3.4.6.1.....2,);
MIBadd(1.3.4.6.1.....3,);

if SendQuery then Memo1.Lines.Add(Ok)
            else Memo1.Lines.Add(Err - +idSNMP1.Reply.ErrorStatus);

for i do Reply.ValueCount-1 do
    Memo1.Lines.Add(Reply.ValueID[i]+ = +Reply.Value[i]);


И не забывайте перед формированием запроса выполнять Query.Clear;