2015-06-24 4 views
0

Привет, я пытаюсь передать ipAdresses, которые находятся в файле функции SNMP, которая будет выполнять операцию GET. Я читаю файл строки за строкой и передавая данные. Но я получаю сообщение об ошибке setAddress, программа работает нормально, если я не перехожу из файла. См. В коде 1-я строка прокомментировала ipAddress;Передача данных файла в функцию

Код:

package com.snmp.discovery; 

import java.io.BufferedReader; 
import java.io.DataInputStream; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.ObjectInputStream.GetField; 

import org.snmp4j.CommunityTarget; 
import org.snmp4j.PDU; 
import org.snmp4j.Snmp; 
import org.snmp4j.TransportMapping; 
import org.snmp4j.event.ResponseEvent; 
import org.snmp4j.mp.SnmpConstants; 
import org.snmp4j.smi.Integer32; 
import org.snmp4j.smi.OID; 
import org.snmp4j.smi.OctetString; 
import org.snmp4j.smi.UdpAddress; 
import org.snmp4j.smi.VariableBinding; 
import org.snmp4j.transport.DefaultUdpTransportMapping; 

public class Discover1 { 

    private static String port = "8001"; 

    // OID of MIB CISCO-MGMT-MDM; Scalar Object = .iso.org.dod.internet.mgmt.mib-2.system.sysDescr.0 
    private static String oidValue = ".1.3.6.1.2.1.1.5.0"; // ends with 0 for scalar object 

    private static int snmpVersion = SnmpConstants.version1; 

    private static String community = "public"; 
    public static void main(String[] args) { 
     try { 
      // Open the file that is the first 
      // command line parameter 
      FileInputStream fstream = new FileInputStream("textfile.txt"); 
      // Get the object of DataInputStream 
      DataInputStream in = new DataInputStream(fstream); 
      BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
      String strLine; 
      //Read File Line By Line 
      while ((strLine = br.readLine()) != null) { 
       // Print the content on the console 
       Discover1.getDevice(strLine); 
      } 
      //Close the input stream 
      in.close(); 
     }catch (Exception e){//Catch exception if any 
      System.err.println("Error: " + e.getMessage()); 
     } 
    } 
    public static void getDevice(String a) throws Exception { 
     System.out.println("SNMP GET Demo"); 
     System.out.println(a); 
     // Create TransportMapping and Listen 
     TransportMapping transport = new DefaultUdpTransportMapping(); 
     transport.listen(); 

     // Create Target Address object 
     CommunityTarget comtarget = new CommunityTarget(); 
     comtarget.setCommunity(new OctetString(community)); 
     comtarget.setVersion(snmpVersion); 

     comtarget.setAddress(new UdpAddress(a+"/"+port)); 
     System.out.println("------------"); 
     comtarget.setRetries(2); 
     comtarget.setTimeout(1000); 

     // Create the PDU object 
     PDU pdu = new PDU(); 
     pdu.add(new VariableBinding(new OID(oidValue))); 
     pdu.setType(PDU.GET); 
     pdu.setRequestID(new Integer32(1)); 

     // Create Snmp object for sending data to Agent 
     Snmp snmp = new Snmp(transport); 

     System.out.println("Sending Request to Agent..."); 
     ResponseEvent response = snmp.get(pdu, comtarget); 

     if (response != null){ 
      System.out.println("Got Response from Agent"); 
      PDU responsePDU = response.getResponse(); 

      if (responsePDU != null){ 
       int errorStatus = responsePDU.getErrorStatus(); 
       int errorIndex = responsePDU.getErrorIndex(); 
       String errorStatusText = responsePDU.getErrorStatusText(); 

       if (errorStatus == PDU.noError){ 
        System.out.println("Snmp Get Response = " + responsePDU.getVariableBindings()); 
       } else { 
        System.out.println("Error: Request Failed"); 
        System.out.println("Error Status = " + errorStatus); 
        System.out.println("Error Index = " + errorIndex); 
        System.out.println("Error Status Text = " + errorStatusText); 
       } 
      } else { 
       System.out.println("Error: Response PDU is null"); 
      } 
     } else { 
      System.out.println("Error: Agent Timeout... "); 
     } 
     snmp.close(); 
    } 
} 
+0

Проблема заключается в вашей уловке. Не перехватывайте ВСЕ исключения. Собственно посмотрите и посмотрите, какие из них могут быть брошены вашими методами и поймать те конкретные исключения. Затем, когда кто-то бросается, это менее расстраивает попытку увидеть, что wtf происходит. –

+0

Я отредактировал вышеуказанный код, пожалуйста, проверьте; Но все равно такая же ошибка – Rakesh

+0

Не так могу сказать. У вашего основного метода все еще есть блок catch try, который захватывает все исключения, и ваш метод по-прежнему бросает исключение. Пока вы не исправите это, вы не сможете сказать, в чем проблема. Кроме того, существует трассировка стека из исключаемого исключения, которое я предполагаю, эта информация будет полезна. –

ответ

-1

Из сообщения об ошибке это выглядит, что у вас есть пробелы в файле. Когда вы передаете IP-адрес напрямую, пробелов нет и, следовательно, он работает. Перед использованием необходимо удалить пробелы.

Изменить следующую строку

Discover1.getDevice(strLine); 

Снимите передний и задний пробелы. Как:

Вариант 1:

Discover1.getDevice(strLine.trim()); 

Вариант 2:

Discover1.getDevice(StringUtils.trim(strLine)); 

Ссылка: StringUtils

+0

Решает ли ваша проблема? – Ambrish

+0

ДА !!! его простое, как то – Rakesh

0

Так что это не может точно быть ответом, но он выиграл» t в комментариях.

Это плохо:

catch(Exception e) { .... }

только сделать метод этого если кто-то в throws Exception. Кроме того, ударите этого человека, если сможете.

Ваш собственный метод НЕ должен methodName() throws Exception. Он должен специально methodName() throws IOException и т.д.

Вы должны делать catch(IOException e) { ... } catch(IllegalArgumentException e) {...} и т.д.

Как вы уже видели, это делает его трудно устранить, если вы не знаете, что это за исключение.

И наконец, при обращении за помощью к Исключению вы обычно должны включать трассировку стека. Например:

Exception in thread "main" java.lang.NullPointerException at com.example.myproject.Book.getTitle(Book.java:16) at com.example.myproject.Author.getBookTitles(Author.java:25) at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

Эта информация полезна при отладке.

+0

Следует избегать бросков исключений (или Throwables). Но если вы регистрируете Exception (даже с e.toString()), вы получаете определенный тип Exception – Danielson

+1

Я не имел в виду, что он должен лично выбросить исключение, я имел в виду, что его метод не должен объявлять, что он выбрасывает Exception, потому что это заставляет всех использовать его, чтобы поймать общие исключения. Отредактировано, чтобы сделать это более ясным. –

Смежные вопросы