Our network management center serves as the management center and the server! Each managed device communicates with the network management center through the switch as a client, using the TCP/IP protocol! SNMP is just a protocol package. SNMP4J, as a Java toolkit used by SNMP, provides convenient and secure toolkit functions! However, a problem was found during use: when the server and the client send messages, they no longer send data after sending several times! The network packet capture was also unsuccessful, and a problem was discovered in the SNMP4J code after tracing the breakpoint! /** * Sends a SNMP message to the supplied address. * * @param address * an <code>TcpAddress</code>. A * <code>ClassCastException</code> is thrown if * <code>address</code> is not a <code>TcpAddress</code> * instance. * @param message * byte[] the message to be sent. * @throws IOException */ public void sendMessage(Address address, byte[] message) throws java.io.IOException { if (server == null) { listen(); } serverThread.sendMessage(address, message); } We can see that the difference between it and UDP is that it uses a service thread! public void sendMessage(Address address, byte[] message) throws java.io.IOException { Socket s = null; SocketEntry entry = (SocketEntry) sockets.get(address); if (logger.isDebugEnabled()) { logger.debug("Looking up connection for destination '" + address + "' returned: " + entry); logger.debug(sockets.toString()); } if (entry != null) { s = entry.getSocket(); } if ((s == null) || (s.isClosed()) || (!s.isConnected())) { if (logger.isDebugEnabled()) { logger.debug("Socket for address '" + address + "' is closed, opening it..."); } pending.remove(entry); SocketChannel sc = null; try { // Open the channel, set it to non-blocking, initiate // connect sc = SocketChannel.open(); sc.configureBlocking(false); sc .connect(new InetSocketAddress( ((TcpAddress) address).getInetAddress(), ((TcpAddress) address).getPort())); s = sc.socket(); entry = new SocketEntry((TcpAddress) address, s); entry.addMessage(message); sockets.put(address, entry); synchronized (pending) { pending.add(entry); } selector.wakeup(); logger.debug("Trying to connect to " + address); } catch (IOException iox) { logger.error(iox); throw iox; } } else { entry.addMessage(message); synchronized (pending) { pending.add(entry); } selector.wakeup(); } } He gets the connection SocketEntry from a Map, and then gets the connection object Socket! Determine whether the Socket is valid. If it is valid, send it directly. If it is invalid, create a connection before sending it! Then I found this code private synchronized void timeoutSocket(SocketEntry entry) { if (connectionTimeout > 0) { socketCleaner.schedule(new SocketTimeout(entry), connectionTimeout); } } That is to say, the server will check the connection itself and clear it! I tried setting the value of connectionTimeout private void init() throws UnknownHostException, IOException { threadPool = ThreadPool.create("Trap", 2); dispatcher = new MultiThreadedMessageDispatcher(threadPool,new MessageDispatcherImpl()); // Local IP and listening port listenAddress = GenericAddress.parse(System.getProperty("snmp4j.listenAddress", "tcp:192.168.9.69/5055")); DefaultTcpTransportMapping transport; transport = new DefaultTcpTransportMapping((TcpAddress) listenAddress); transport.setConnectionTimeout(0); snmp = new Snmp(dispatcher, transport); snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1()); snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c()); snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3()); USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0); SecurityModels.getInstance().addSecurityModel(usm); snmp.listen(); } Add a line of code to set the timeout of DefaultTcpTransportMapping to 0! Then there will be no problem! Although the problem has been temporarily solved, due to my lack of in-depth understanding of SNMP4J, I am afraid that the problem may not be this! I also hope to use SNMP4J as a tool, and as a server, there is a solution to the problem when sending data! The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM. You may also be interested in:
|
<<: The specific use and difference between attribute and property in Vue
>>: The difference between delete, truncate, and drop and how to choose
Table of contents Preface text 1. Install styleli...
Currently I have made a project, the interface is ...
Linear-gradient background-image: linear-gradient...
1. Add the isolation marker: ip netns add fd 2. P...
The above article has temporarily concluded my int...
A WeakMap object is a collection of key/value pai...
First delete mysql: sudo apt-get remove mysql-* T...
9 great JavaScript framework scripts for drawing ...
Preface: In Vue, props can be used to connect ori...
Table of contents Overview 1. Hook calling order ...
When discussing Web standards, one thing that alwa...
The Nginx ngx_http_image_filter_module module (ng...
Use of AES encryption Data transmission encryptio...
We all have files stored on our computers -- dire...
<br />Original text: http://jorux.com/archiv...