2013-02-20 2 views
0

J'utilise snmp4j ver 1.10.1 de org.snmp4j et c'est mon code de récepteur de piège pour attraper des données de piège snmp.Valeur manquante dans SNMP

public class TrapReceiver extends Thread implements CommandResponder { 

//@Autowired 
private CarService carService; 
List<PDUv1> listPdu = new ArrayList<PDUv1>(); 
List<PDUv1> temp = new ArrayList<PDUv1>(); 
String message = ""; 
int totReceivedTrap = 0; 

public TrapReceiver(CarService carService){ 
    this.carService = carService; 
} 

public synchronized void processPdu(CommandResponderEvent cmdRespEvent) { 
    PDUv1 pdu = (PDUv1) cmdRespEvent.getPDU(); 
    if (pdu != null) { 
     System.out.println(pdu.getVariableBindings().toString());   
    } 
    totReceivedTrap++; 
    System.out.println("total received trap "+totReceivedTrap); 
} 

public void run() { 
    while (true) { 
     try { 
      this.listen(new UdpAddress("192.168.1.5/162")); //alamat PDU akan listen 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

public synchronized void listen(TransportIpAddress address) throws IOException { 
    AbstractTransportMapping transport; 
    if (address instanceof TcpAddress) { 
     transport = new DefaultTcpTransportMapping((TcpAddress) address); 
    } else { 
     transport = new DefaultUdpTransportMapping((UdpAddress) address); 
    } 

    ThreadPool threadPool = ThreadPool.create("DispatcherPool", 10); 
    MessageDispatcher mDispathcher = new MultiThreadedMessageDispatcher(
      threadPool, new MessageDispatcherImpl()); 

    // add message processing models 
    mDispathcher.addMessageProcessingModel(new MPv1()); 
    mDispathcher.addMessageProcessingModel(new MPv2c()); 

    // add all security protocols 
    SecurityProtocols.getInstance().addDefaultProtocols(); 
    SecurityProtocols.getInstance().addPrivacyProtocol(new Priv3DES()); 

    // Create Target 
    CommunityTarget target = new CommunityTarget(); 
    target.setCommunity(new OctetString("public")); 

    Snmp snmp = new Snmp(mDispathcher, transport); 
    snmp.addCommandResponder(this); 

    transport.listen(); 
    message ="Listening on " + address; 
    System.out.println(message); 

    try { 
     this.wait(); 
    } catch (InterruptedException ex) { 
     Thread.currentThread().interrupt(); 
    } 
} 

public String getMessage(){ 
    return this.message; 
} 
} 

Mais une valeur variable est manquante, la valeur de cette variable est la latitude et la longitude (format: -903849323,20384; 230.349.402,03000). Et quand j'attrape les données en utilisant wireshark, j'ai la valeur qui manque aussi.

La capture d'écran http://www.mediafire.com/view/?kjz1drb9jhda88a http://www.mediafire.com/view/?ov6lqn6u9n669my

Pourquoi les données est nulle, ce mal.

Répondre

1

Si vous ne voyez pas la valeur dans le paquet capturé par wireshark, alors il est complètement valide que vous obteniez la valeur nulle dans le code. Que pourriez-vous attendre d'autre?

Cela semble être plus probable un problème/caractéristique de l'agent SNMP en cours d'exécution sur le périphérique (par exemple l'emplacement géographique n'a pas été défini, le signal GPS ne sont pas disponibles, etc.)

+0

Ok merci. Je doute qu'il y ait quelque chose qui ne va pas avec mon réseau. Et après vérifié, cela causé par l'appareil (GPS) –