[高级]UDP 数据发送失败:java.io.IOException: Invalid argument

商科程序员 2010-08-26 01:54:34
我的是一个 SNMP 应用程序,本来是监听虚通道的 161 端口,现在在前面加了个代理。
由代理监听 161 端口,我的程序监听 0.0.0.0 的 18161 端口,代理收到数据后在数据外中做一些修改,然后发给我。
我的程序应按 snmp 报文处理,把取的值填入 PDU 后直接发回给数据发送端(注意,不是代理端)。
结果报错:
java.io.IOException: Invalid argument
at java.net.PlainDatagramSocketImpl.send(Native Method)
at java.net.DatagramSocket.send(DatagramSocket.java:612)
at org.snmp4j.transport.DefaultUdpTransportMapping.sendMessage(DefaultUdpTransportMapping.java:115)
at org.snmp4j.MessageDispatcherImpl.sendMessage(MessageDispatcherImpl.java:183)
。。。。

明显是调用 JVM 底层的发送数据接口失败。
如果我用 snmpget 命令访问代理,数据可以正常返回。

哪位高手清楚 UDP 的数据传输方式?对方的目的地址如果是一个IP,响应数据的源地址变成了另一个IP,会不会有问题。
如果有问题,为什么本地的数据代理返回没问题,其它 IP 发来的数据返回不了?
...全文
873 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
weborn_liang 2011-04-01
  • 打赏
  • 举报
回复
rg.snmp4j.MessageException: Invalid argument
at org.snmp4j.MessageDispatcherImpl.sendPdu(MessageDispatcherImpl.java:479)
at org.snmp4j.Snmp.sendMessage(Snmp.java:1078)
at org.snmp4j.Snmp.send(Snmp.java:891)
at org.snmp4j.Snmp.send(Snmp.java:871)
at org.snmp4j.Snmp.send(Snmp.java:836)
at com.network.manage.common.util.SnmpOperation.operation(SnmpOperation.java:106)


我也遇到同样的问题,不过环境是RedHat+Sybase

有么有高人啊?救命啊。。。
商科程序员 2010-09-08
  • 打赏
  • 举报
回复
那些DEBUG都是我自己加的.原来代码就是这样.
主要是DatagramSocket在发送数据时报错.注意,不是空指针.我上面写=null只是表示它的数据类型.
    protected DatagramSocket socket = null;
public void sendMessage(Address targetAddress, byte[] message) throws java.io.IOException
{
InetSocketAddress targetSocketAddress = new InetSocketAddress(((UdpAddress) targetAddress).getInetAddress(),
((UdpAddress) targetAddress).getPort());

DatagramPacket packet = new DatagramPacket(message, message.length, targetSocketAddress);
socket.send(packet);
}
cyhu 2010-09-08
  • 打赏
  • 举报
回复
没看明白
商科程序员 2010-09-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chouy 的回复:]
以下是org.snmp4j.transport.DefaultUdpTransportMapping类的一个方法,我没有对方法做任何修改.拆包过程也不是我手动,而是SNMP4J框架进行的.

Java code

protected DatagramSocket socket = null;
public void sendMessage(Address targetAd……
[/Quote]
最后一句.
yaoweijq 2010-08-30
  • 打赏
  • 举报
回复
提的问题不知所云啊
at org.snmp4j.transport.DefaultUdpTransportMapping.sendMessage(DefaultUdpTransportMapping.java:115)
这115行到底是哪句。。。
[Quote=引用楼主 chouy 的回复:]
我的是一个 SNMP 应用程序,本来是监听虚通道的 161 端口,现在在前面加了个代理。
由代理监听 161 端口,我的程序监听 0.0.0.0 的 18161 端口,代理收到数据后在数据外中做一些修改,然后发给我。
我的程序应按 snmp 报文处理,把取的值填入 PDU 后直接发回给数据发送端(注意,不是代理端)。
结果报错:
java.io.IOException: Invalid a……
[/Quote]
商科程序员 2010-08-30
  • 打赏
  • 举报
回复
以下是org.snmp4j.transport.DefaultUdpTransportMapping类的一个方法,我没有对方法做任何修改.拆包过程也不是我手动,而是SNMP4J框架进行的.

protected DatagramSocket socket = null;
public void sendMessage(Address targetAddress, byte[] message) throws java.io.IOException
{
InetSocketAddress targetSocketAddress = new InetSocketAddress(((UdpAddress) targetAddress).getInetAddress(),
((UdpAddress) targetAddress).getPort());
logger.info(
"Sending message to " + targetAddress.toString() + " with length " + message.length + ": "
+ new OctetString(message).toHexString());
logger.info("targetSocketAddress=" + targetSocketAddress.toString());
logger.info(socket.getInetAddress() + " " + socket.getLocalPort() + " " + socket.getLocalSocketAddress() + " " + socket.getRemoteSocketAddress());
DatagramPacket packet = new DatagramPacket(message, message.length, targetSocketAddress);
logger.info("ip:" + targetSocketAddress.getHostName() + ", port:" + targetSocketAddress.getPort());
logger.info("-----------my own sock -------------");
// logger.info(targetSocketAddress.getAddress().getHostAddress());
InetSocketAddress isa = new InetSocketAddress(targetSocketAddress.getHostName(), targetSocketAddress.getPort());
DatagramPacket packet2 = new DatagramPacket(message, message.length, isa);
DatagramSocket socket2 = new DatagramSocket();
socket2.send(packet2);
logger.info("-----------my own sock success -------------");
socket.send(packet);
}
xtuxucj 2010-08-27
  • 打赏
  • 举报
回复
能不能不把DatagramPackage这块代码贴些出来
商科程序员 2010-08-27
  • 打赏
  • 举报
回复
自己顶一下.
最近问的问题都在论坛上没人给答案.
不知道是问题太难,还是没有高人,还是不屑回答.

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧