2013-04-10 1 views
0

Я работаю с SNMP в Android. Я хочу получить статус принтера. Я использую Snmp4Android.jar и OID 1.3.6.1.2.1.25.3.5.1.1. См. Эту ссылку Printer Status.Получить состояния принтера с помощью SNMP OID

SnmpActivity.java здесь

public class SnmpActivity extends Activity { 

private static String ipAddress = "PrinterIP"; 

private static String port = "Port"; 

private static String oidValue = "1.3.6.1.2.1.25.3.5.1.1"; 

public static Snmp snmp; 
public static CommunityTarget comtarget; 
static PDU pdu; 
static OID oid; 
static VariableBinding req; 
Button b; 
private static final String tag = "SNMP CLIENT"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    System.setProperty("java.net.preferIPv4Stack", "true"); 
    System.setProperty("java.net.preferIPv6Addresses", "false"); 

    b = (Button) findViewById(R.id.buttonClick); 
    b.setOnClickListener(new OnClickListener() { 

     public void onClick(View v) { 
      try { 
       sendSnmpRequest(oidValue); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
    }); 
} 



private void sendSnmpRequest(String oid) throws Exception { 

     ResponseEvent response; 
     OctetString community1 = new OctetString("public"); 
     String host = ipAddress + "/" + port; 
     Address tHost = new UdpAddress(host); 
     TransportMapping transport = new DefaultUdpTransportMapping(); 
     transport.listen(); 
     CommunityTarget comtarget = new CommunityTarget(); 
     comtarget.setCommunity(community1); 
     comtarget.setVersion(SnmpConstants.version1); 
     comtarget.setAddress(tHost); 
     comtarget.setRetries(2); 
     comtarget.setTimeout(5000); 
     PDU pdu = new PDU(); 
     pdu.add(new VariableBinding(new OID(oid))); 
     pdu.setType(PDU.GET); 
     snmp = new Snmp(transport); 
     response = snmp.get(pdu, comtarget); 
     if (response != null) { 
      Log.i(tag, "Got Response from Agent " 
        + response.getResponse().toString()); 
      PDU responsePDU = response.getResponse(); 
      if (responsePDU != null) { 
       int errorStatus = responsePDU.getErrorStatus(); 
       int errorIndex = responsePDU.getErrorIndex(); 
       String errorStatusText = responsePDU.getErrorStatusText(); 

       if (errorStatus == PDU.noError) { 
        Log.i(tag, 
          "Snmp Get Response = " 
            + responsePDU.getVariableBindings()); 
        Toast.makeText(
          getApplicationContext(), 
          "Snmp Get Response = " 
            + responsePDU.getErrorStatusText(), 
          Toast.LENGTH_LONG).show(); 

        System.out 
          .println("--" + responsePDU.getVariableBindings()); 

       } else { 
        Log.i((String) tag, "Error: Request Failed"); 
        Log.i(tag, "Error Status = " + errorStatus); 
        Log.i(tag, "Error Index = " + errorIndex); 
        Log.i(tag, "Error Status Text = " + errorStatusText); 
       } 

      } else { 
       Log.i(tag, "Error: Response PDU is null"); 
      } 
     } else { 
      Log.i(tag, "Error: Agent Timeout... "); 
     } 
     snmp.close(); 
    } 

Благодаря ...

+0

Каков результат вашего кода сейчас? –

+0

если (errorStatus == PDU.noError) это не работает еще часть этого, если условие теперь показывает то, Log.i ((String) тег, «Ошибка: Ошибка запроса»); Log.i (тег, "Error Status =" + errorStatus); Log.i (тег, «Индекс ошибок =» + errorIndex); Log.i (тег, «Error Status Text =» + errorStatusText); – user4232

+0

И каков статус ошибки, индекс и текст? Проблемы с связью по SNMP могут иметь несколько причин, скорее всего, блокировка брандмауэром порта udp 161, устройство не прослушивание на этом порту, неправильная строка сообщества, ... –

ответ

1

Использование Net-SNMP или какой-либо другой доступный браузер MIB (например, с помощью iReasoning). Вы можете обнаружить, что в hrPrinterTable нет данных (OID .1.3.6.1.2.1.25.3.5).

Если есть некоторые строки, а затем изменить OID к 1.3.6.1.2.1.25.3.5.1.1.1 (добавить 1 в конце). Это правильный OID для hrPrinterStatus в первой строке.

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

  • Нет связанных вопросов^_^