问题描述:
三台服务器分别为:serverA(ipA,portA)、serverB(ipB,portB)、serverC(ipC、portC).
从serverA上发一个pud到serverB上,serverB接收到serverA发来的pdu后直接转发给serverC,
serverC接收到来自serverB发来的pdu后发现其ip地址不是serverA的地址ipA,而是serverB的地址ipB,
这样就导致pdu的源地址丢失了。
(丢失的ip地址是指event.getPeerAddress。event是processPdu(CommandResponderEvent event)方法中的参数,
processPdu(CommandResponderEvent event)方法属于SNMP4J.jar包中CommandResponder接口)
*******serverB的代码如下:******* /**
* serverB服务代码。
*
* 实现CommandResponder的processPdu方法, 用于接收传入的PDU,然后转发到目标serverC去
* 当接收到pdu时,会自动进入这个方法。
*
* @param respEvnt
*/
public void processPdu(CommandResponderEvent event) {
//下面从event中取出来的ip是:谁给他发的pud,这ip地址就是谁的。
//这样就出问题了,从serverA到serverC,pdu经过serverB的转发,
//最后得到的ip地址成了serverB的了,把源ip地址ipA给丢了.
//请高手帮忙看看怎么处理才能保证不丢失ipA这个源地址。
String ip = event.getPeerAddress().toString();
// 设置 target(也就是serverC)
CommunityTarget target = new CommunityTarget();
//目标地址,也就是serverC的地址
Address targetAddress = new org.snmp4j.smi.UdpAddress(java.net.InetAddress
.getByName(ipC), portC);
target.setAddress(targetAddress);
// 通信不成功时的重试次数
target.setRetries(2);
// 超时时间
target.setTimeout(1500);
// snmp版本
target.setVersion(SnmpConstants.version2c); // 接收到来自serverA的pdu,转发到目标serverC去
PDU pdu = event.getPDU();
TransportMapping sendTransport = new DefaultUdpTransportMapping();
Snmp sendSnmp = new Snmp(sendTransport);
sendTransport.listen();
//往目标serverC发送pdu
sendSnmp.send(pdu, target);
}
三台服务器分别为:serverA(ipA,portA)、serverB(ipB,portB)、serverC(ipC、portC).
从serverA上发一个pud到serverB上,serverB接收到serverA发来的pdu后直接转发给serverC,
serverC接收到来自serverB发来的pdu后发现其ip地址不是serverA的地址ipA,而是serverB的地址ipB,
这样就导致pdu的源地址丢失了。
(丢失的ip地址是指event.getPeerAddress。event是processPdu(CommandResponderEvent event)方法中的参数,
processPdu(CommandResponderEvent event)方法属于SNMP4J.jar包中CommandResponder接口)
*******serverB的代码如下:******* /**
* serverB服务代码。
*
* 实现CommandResponder的processPdu方法, 用于接收传入的PDU,然后转发到目标serverC去
* 当接收到pdu时,会自动进入这个方法。
*
* @param respEvnt
*/
public void processPdu(CommandResponderEvent event) {
//下面从event中取出来的ip是:谁给他发的pud,这ip地址就是谁的。
//这样就出问题了,从serverA到serverC,pdu经过serverB的转发,
//最后得到的ip地址成了serverB的了,把源ip地址ipA给丢了.
//请高手帮忙看看怎么处理才能保证不丢失ipA这个源地址。
String ip = event.getPeerAddress().toString();
// 设置 target(也就是serverC)
CommunityTarget target = new CommunityTarget();
//目标地址,也就是serverC的地址
Address targetAddress = new org.snmp4j.smi.UdpAddress(java.net.InetAddress
.getByName(ipC), portC);
target.setAddress(targetAddress);
// 通信不成功时的重试次数
target.setRetries(2);
// 超时时间
target.setTimeout(1500);
// snmp版本
target.setVersion(SnmpConstants.version2c); // 接收到来自serverA的pdu,转发到目标serverC去
PDU pdu = event.getPDU();
TransportMapping sendTransport = new DefaultUdpTransportMapping();
Snmp sendSnmp = new Snmp(sendTransport);
sendTransport.listen();
//往目标serverC发送pdu
sendSnmp.send(pdu, target);
}
解决方案 »
- 怎么利用土豆提供的API获取它的视频信息
- 菜鸟求教...
- 加入一句话之后tomcat 报错了 。急.....
- java class 映射 遍历对象属性 对属性做编码
- hadoop-0.2怎么没有hadoop-defaule.xml和hadoop-site.xml啦?
- web项目中如何使用JasperReport
- 关于ActionMessage的初始化
- 高分求教:关于JSP中include的一个问题,如何传递JSP变量???
- 如何获取一个不再工程中的代码文件的所有函数或者方法。
- 基础高手请进来,一道书后作业题
- 估计我这个问题连hibernate他爹也回答不了了!!!喔喔喔喔喔喔
- struts2中的<s:div>中引用的jsp页中的<img>带中文名时显示错误
我现在遇到的问题就是一但经过中转我就丢失了这个pdu的源地址了。
应该通过什么方式避免这个问题。