IDSNMP 的详细说明

4 篇文章 0 订阅
1 篇文章 0 订阅

SNMP

简介

SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。随后,人们对SGMP进行了很大的修改,特别是加入了符合Internet定义的SMI和MIB:体系结构,改进后的协议就是著名的SNMP。SNMP的目标是管理互联网Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准网络管理框架的影响也很大。现在SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。

  SNMP的体系结构是围绕着以下四个概念和目标进行设计的:保持管理代理(agent)的软件成本尽可能低;最大限度地保持远程管理的功能,以便充分利用Internet的网络资源体系结构必须有扩充的余地;保持SNMP的独立性,不依赖于具体的计算机网关网络传输协议。在最近的改进中,又加入了保证SNMP体系本身安全性的目标。

1.1类结构

  TIdSNMP = class(TIdUDPClient)    
  private
    fCommunity: string;
    fTrapPort: Integer;
    procedure SetCommunity(const Value: string);
  public
    Query : TSNMPInfo;
    Reply : TSNMPInfo;
    Trap  : TSNMPInfo;

    constructor Create(aOwner : TComponent); override;
    destructor Destroy; override;
    function SendQuery : boolean;
    function QuickSend(const Mib, Community, Host:string; var Value:string):Boolean;
    function QuickSendTrap(const Dest, Enterprise, Community: string;
                      Port, Generic, Specific: integer; MIBName, MIBValue: TStringList): integer;
    function QuickReceiveTrap(var Source, Enterprise, Community: string;
                      var Port, Generic, Specific, Seconds: integer; var MIBName, MIBValue: TStringList): integer;
    function SendTrap: integer;
    function ReceiveTrap: integer;
  published
    property Port default 161;
    property TrapPort : Integer read fTrapPort Write fTrapPort default 162;
    property Community : string read fCommunity write SetCommunity;
  end;

   从以上可以看出SNMP的控件实际上是从UDP继承而来。基本的通讯应该是采用UDP方式。

2.1继承

            TComponent ---TidBaseComponent---TidComponent---TidUDPBase---TidUDPClient---TidSNMP

2.2属性

      Active 

 

property Active: Boolean read GetActive write SetActive Default False;

 

function TIdUDPBase.GetActive: Boolean;
begin
  Result := FDsgnActive or (Assigned(FBinding) and FBinding.HandleAllocated);
end;

 

//访问Active时(分配了 TIdSocketHandle可以认为是true)

           

procedure TIdUDPBase.SetActive(const Value: Boolean);                             
begin
  if (Active <> Value) then begin
    if not ((csDesigning in ComponentState) or (csLoading in ComponentState)) then begin
      if Value then begin
        GetBinding;  //  value = true时创建SOCKET
      end
      else begin
        CloseBinding; //value = false时销毁SOCKET
      end;
    end
    else begin  // don't activate at designtime (or during loading of properties)    {Do not Localize}
      FDsgnActive := Value;
    end;
  end;
end;

 //修改Active时,要做的事情。

 

 BroadcastEnabled    广播开启,向同一网段的所有IP的PORT发送数据

property BroadcastEnabled: Boolean read FBroadcastEnabled write SetBroadcastEnabled Default False;

 

procedure TIdUDPBase.SetBroadcastEnabled(const Value: Boolean);
begin
  if FBroadCastEnabled <> Value then begin
    FBroadcastEnabled := Value;  //保存新值
    if Active then begin
      BroadcastEnabledChanged;  //设置套接口的选项,实际上调用了SetSockOpt函数,设置SOCKET参数
    end;
  end;
end;

ABinding.SetSockOpt(Id_SOL_SOCKET, Id_SO_BROADCAST, PChar(@BroadCastData), SizeOf(BroadCastData));

实际上就是以上这句话。

 

 BufferSize  该值是UDP传输数据的默认值

 

 property BufferSize: Integer read FBufferSize write FBufferSize default ID_UDP_BUFFERSIZE;

ID_UDP_BUFFERSIZE = 8192

 

Communit 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值