【问题标题】:How should an snmp client receive responses from multiple snmp agents?snmp 客户端应该如何接收来自多个 snmp 代理的响应?
【发布时间】:2017-06-23 19:10:02
【问题描述】:

我需要从单个客户端/管理器进程向多个 snmp 代理发送获取请求/接收响应。 我已经根据以下 url 实现了客户端/代理: http://www.jitendrazaa.com/blog/java/snmp/create-snmp-client-in-java-using-snmp4j/http://www.jitendrazaa.com/blog/java/snmp/creating-snmp-agent-server-in-java-using-snmp4j/

为了向代理发送请求,对每个服务器执行以下操作:

TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
transport.listen();
...
pdu.setType(PDU.GET);
// communityTarget contains server target address.
ResponseEvent event = snmp.send(pdu, communityTarget, null); 

为了接收来自服务器的响应,我是否需要为每个服务器执行单独的 transport.listen()?或创建 每个服务器都有一个新的 TransportMapping 和 Snmp 对象?

我不明白客户端进程如何知道哪个服务器返回了响应? ...自从 每次调用transport.listen(),监听端口地址(transport.getListenAddress())都是一样的。 并列出了 1 个额外的 udp 端口​​ (netstat)。

我打算从不同的后台线程轮询每个服务器(以便可以配置轮询间隔)。

谢谢

【问题讨论】:

    标签: snmp snmp4j


    【解决方案1】:

    您应该使用相同的传输映射。

    从您提供的示例来看,您似乎正在使用同步 API。

    响应也来自您发送请求的代理。

    无论如何,你都可以从ResponseEvent.getPeerAddress获取peer(代理)地址

    http://www.snmp4j.org/doc/org/snmp4j/event/ResponseEvent.html#getPeerAddress()

    【讨论】:

    • 使用同步api,我是否认为如果我从不同线程发送请求/响应,从1个线程发送snmp同步请求/响应不会阻塞来自另一个线程的同步请求/响应?即它们可以同时发送?
    • 没错。每个线程独立运行。 SNMP4J 是线程安全的snmp4j.org/html/faq.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多