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();
}
감사합니다 ...
지금 코드의 출력은 무엇입니까? –
if (errorStatus == PDU.noError) 이것이 작동하지 않습니다. else 현재 조건이 표시되고있는 경우 즉, Log.i ((String) 태그, "Error : Request Failed"); Log.i (태그, "Error Status ="+ errorStatus); Log.i (태그, "Error Index ="+ errorIndex); Log.i (태그, "Error Status Text ="+ errorStatusText); – user4232
오류 상태, 색인 및 텍스트는 무엇입니까? SNMP를 통한 통신 문제로 인해 여러 가지 이유로 방화벽 차단 UDP 포트 161, 장치가 해당 포트에서 수신 대기하지 않음, 잘못된 커뮤니티 문자열 등이 나타날 수 있습니다. –