通过udp发送时在Apache Mina接收到UnreachablePortException



我正在使用Mina V2.1.3作为网络应用程序;尤其是我有一个udp会话问题:我想向特定的"发布消息;ips";以及";端口";一些接收器通过Udp。但我不知道(我也不在乎(这些接收器是否真的在监听他们的端口并真的收到了包裹。

如果没有接收器正在侦听其端口,则Mina将接收回ICMP包,这意味着无法访问该端口。Mina捕获此包并抛出UnreachablePortException。然后Mina关闭会话对象并停止发送。我的目的是忽略";目的地不可达";包,因此我仍然想发送udp包("即发即弃原则"(。

这是我的方法(某种伪代码(:

NioDatagramConnector  connector = new NioDatagramConnector();
((DatagramSessionConfig) connector.getSessionConfig()).setCloseOnPortUnreachable(false);
connector.getStatistics().setThroughputCalculationInterval(1);
connector.getFilterChain().addLast("logger", new LoggingFilter());
DefaultIoFilterChainBuilder filterChainBuilder = connector.getFilterChain();
filterChainBuilder.addFilter(...);
connector.setHandler(this);
for (UDPClient client : udpClients) {
((NioDatagramConnector)connector).connect(new InetSocketAddress(client.getIP(), client.getPort()));
}
//Sending data
while(true) {
connector.broadcast("Message");
Thread.sleep(10);
}
public void sessionClosed(IoSession session) throws Exception {
System.out.println("Called after ICMP package is received");
}
//Further methods which are based of IoHandler

基于调试,我可以看到Mina将删除此会话,并最终调用closeSession((-方法(由IoHandler提供(。

如错误报告中所述https://issues.apache.org/jira/browse/DIRMINA-1137

UDP服务器套接字需要在远程端口的远程设备上打开,否则会出现UnreachablePortException。这个异常不是由MINA或JAVA完成的,而是由POSIX完成的,并且是通用的。

最新更新