2017-06-23 3 views
0

Je dois envoyer des demandes/recevoir des réponses à plusieurs agents snmp à partir d'un seul processus client/gestionnaire. J'ai implémenté client/agent à base ci-dessous urls: 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/Comment un client snmp devrait-il recevoir des réponses de plusieurs agents snmp?

Pour envoyer une demande à un agent, ce qui suit est réalisée pour chaque serveur:

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); 

Afin de recevoir des réponses à partir des serveurs, dois-je effectuer un transport.listen() séparé pour chaque serveur? ou créer un nouvel objet TransportMapping et Snmp pour chaque serveur?

Je ne comprends pas comment le processus client peut savoir quel serveur a renvoyé la réponse? ... puisque chaque fois que transport.listen() est appelée, l'adresse du port d'écoute (transport.getListenAddress()) est la même. et 1 port udp supplémentaire est répertorié (netstat).

J'ai l'intention d'interroger chaque serveur à partir d'un thread d'arrière-plan différent (afin que l'intervalle d'interrogation puisse être configuré).

Merci

Répondre

0

Vous devez utiliser le même mappage de transport. Dans l'exemple que vous avez fourni, il semble que vous utilisiez l'API synchrone.

La réponse est juste de l'agent que vous avez envoyé la demande aussi.

Dans tous les cas, vous pouvez obtenir le pair (agent) adresse de ResponseEvent.getPeerAddress

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

+0

Avec l'api synchrone, suis-je raison de penser que si j'envoie des demandes/réponses de différents threads, l'envoi d'un SNMP synchrone requête/réponse de 1 thread ne doit pas bloquer la requête/réponse synchrone d'un autre thread? c'est-à-dire qu'ils peuvent être envoyés simultanément? –

+0

où chaque thread interroge un périphérique différent –

+0

C'est correct. Chaque thread agit indépendamment. SNMP4J est thread-safe http://www.snmp4j.org/html/faq.html – Oliver