0
我在Android中使用SNMP。我想獲得打印機狀態。我正在使用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();
}
謝謝...
你的代碼現在輸出什麼? – 2013-04-22 14:59:16
if(errorStatus == PDU.noError)this is not working else this part if this condition is now showing Log.i((String)tag,「Error:Request Failed」); Log.i(tag,「Error Status =」+ errorStatus); Log.i Log.i(tag,「Error Index =」+ errorIndex); Log.i(標記,「錯誤狀態文本=」+ errorStatusText); – user4232 2013-04-22 15:23:18
什麼是錯誤狀態,索引和文本?通過SNMP進行通信的問題可能有多種原因,最有可能是防火牆阻止udp端口161,設備不在該端口上偵聽,錯誤的團體字符串... – 2013-04-23 06:35:51