gpt4 book ai didi

android - Android 版

转载 作者:太空狗 更新时间:2023-10-29 13:37:23 26 4
gpt4 key购买 nike

我想在 android 中使用简单的 snmp get。我找到了 java 的代码并尝试在 android 中使用它。我还附加了 snmp4j.jar 文件用于 android。但是我得到了 NullPointer 异常,我没有得到输出。如果有人对如何在 android 中使用 snmp 有任何想法或代码,请给我建议。

以下是我试过的代码,

1   import java.io.IOException;
2 import org.snmp4j.CommunityTarget;
3 import org.snmp4j.PDU;
4 import org.snmp4j.Snmp;
5 import org.snmp4j.TransportMapping;
6 import org.snmp4j.event.ResponseEvent;
7 import org.snmp4j.mp.SnmpConstants;
8 import org.snmp4j.smi.OID;
9 import org.snmp4j.smi.OctetString;
10 import org.snmp4j.smi.UdpAddress;
11 import org.snmp4j.smi.VariableBinding;
12 import org.snmp4j.transport.DefaultUdpTransportMapping;
13 import android.app.Activity;
14 import android.os.Bundle;
15 import android.util.Log;
16 import android.view.View;
17 import android.view.View.OnClickListener;
18 import android.widget.Button;
19 import android.widget.Toast;
20
21 public class SNMPClient extends Activity {
22
23 private static String ipAddress = "127.0.0.1";
24 private static String port = "161";
25 //cmd to request from Server
26 private static String oidValue = "1.3.6.1.2.1.1.5.0";
27 private static int snmpVersion = SnmpConstants.version2c;
28 private static String community = "public";
29
30 public static Snmp snmp;
31 public static CommunityTarget comtarget;
32 static PDU pdu;
33 static OID oid;
34 static VariableBinding req;
35 Button b;
36 private static final String tag = "SNMP CLIENT";
37
38 @Override
39 public void onCreate(Bundle savedInstanceState) {
40 super.onCreate(savedInstanceState);
41 setContentView(R.layout.main);
42
43 System.setProperty("java.net.preferIPv4Stack", "true");
44 System.setProperty("java.net.preferIPv6Addresses", "false");
45
46 b = (Button) findViewById(R.id.getvalue);
47 b.setOnClickListener(new OnClickListener() {
48
49 public void onClick(View v) {
50 // TODO Auto-generated method stub
51 try {
52 sendSnmpRequest(oidValue);
53 } catch (IOException e) {
54 // TODO Auto-generated catch block
55 e.printStackTrace();
56 } catch (Exception e) {
57 // TODO Auto-generated catch block
58 e.printStackTrace();
59 }
60
61 }
62 });
63 }
64
65 private void sendSnmpRequest(String cmd) throws Exception {
66 // Create TransportMapping and Listen
67 TransportMapping transport = new DefaultUdpTransportMapping();
68 transport.listen();
69
70 // Create Target Address object
71 CommunityTarget comtarget = new CommunityTarget();
72 comtarget.setCommunity(new OctetString(community));
73 comtarget.setVersion(snmpVersion);
74 comtarget.setAddress(new UdpAddress(ipAddress + "/" + port));
75 comtarget.setRetries(2);
76 comtarget.setTimeout(1000);
77 // Prepare PDU
78 req = new VariableBinding();
79 OID oid = new OID(cmd);
80 req.setOid(oid);
81 pdu = new PDU();
82 pdu.add(req);
83 Snmp snmp = new Snmp(transport);
84 Log.i(tag ,"Sending Request to Agent...");
85 ResponseEvent response = snmp.get(pdu, comtarget);
86 // Process Agent Response
87 if (response != null) {
88 Log.i(tag,"Got Response from Agent"); //upto this get in Logcat
89 PDU responsePDU = response.getResponse(); //Here get Null response
90 if (responsePDU != null) {
91 int errorStatus = responsePDU.getErrorStatus();
92 int errorIndex = responsePDU.getErrorIndex();
93 String errorStatusText = responsePDU.getErrorStatusText();
94
95 if (errorStatus == PDU.noError) {
96 Log.i(tag,"Snmp Get Response = "
97 + responsePDU.getVariableBindings());
98 Toast.makeText(getApplicationContext(),
99 "Snmp Get Response = " + responsePDU.getVariableBindings(),Toast.LENGTH_LONG).show();
100 } else {
101 Log.i((String) tag,"Error: Request Failed");
102 Log.i(tag,"Error Status = " + errorStatus);
103 Log.i(tag,"Error Index = " + errorIndex);
104 Log.i(tag,"Error Status Text = " + errorStatusText);
105 }
106 } else {
107 Log.i(tag,"Error: Response PDU is null"); // This get in Logcat
108 }
109 } else {
110 Log.i(tag,"Error: Agent Timeout... ");
111 }
112 snmp.close();
113 }}

请任何人有任何解决方案请建议我。提前致谢......

在第 89 行获取空值,因此获取 NUllPointer 异常......任何想法或代码

最佳答案

来自ResponseEvent.getResponse()文档(强调我的):

Returns: a PDU instance if a response has been received. If the request timed out then null will be returned.

现在显然您可以看到您在该行得到了 null 响应:

PDU responsePDU = response.getResponse();

最有可能因为您正尝试通过 SNMP 获取 Android 的本地主机地址,即:

private static String ipAddress = "127.0.0.1";
private static String port = "161";
// ...
comtarget.setAddress(new UdpAddress(ipAddress + "/" + port));

这没有意义,因为您的 Android 可能没有本地运行的 SNMP 服务,那么您如何从未运行的 SNMP 服务获得响应?

尝试将 ipAddress 更改为您要连接的设备的地址。

关于android - Android 版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9175826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com