问题描述:
  三台服务器分别为: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);
}