apache mina2 udp客户端模式断线重连问题

jiangzilin 2020-10-23 05:01:46
在用mina udp客户端NioDatagramConnector的时候,如果断线了,重连会提示端口被占用,断线的时候用的dispose方法,但是本地端口没有释放,如何处理?这是不是框架的一个bug?
下面是连接:

下面是断开后释放连接:

下面是重连报错:

下面调到源码,发现此处又重新连接这个端口,之前的dispose方法并没有把本地端口释放
...全文
7983 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangzilin 2020-10-26
  • 打赏
  • 举报
回复
试过先关闭session再dispose,也是一样的,提示端口被占用,底层的DatagramChannel没关闭
qybao 2020-10-23
  • 打赏
  • 举报
回复
查看了一下api文档,dispose并不一定会释放端口,可能会被阻塞
http://mina.apache.org/mina-project/gen-docs/2.0.20/apidocs/org/apache/mina/transport/socket/nio/NioDatagramConnector.html
public final void dispose()
Releases any resources allocated by this service. Please note that this method might block as long as there are any sessions managed by this service.
Specified by:
dispose in interface IoService

所以,可以用getManagedSessions()把所有的IoSession关闭(调用closeNow()方法),然后再去dispose
getManagedSessions参考
http://mina.apache.org/mina-project/gen-docs/2.0.20/apidocs/org/apache/mina/core/service/IoService.html#getManagedSessions--
closeNow参考
http://mina.apache.org/mina-project/gen-docs/2.0.20/apidocs/org/apache/mina/core/session/IoSession.html#closeNow--


tianfang 2020-10-23
  • 打赏
  • 举报
回复
如果可能 最好换到netty https://camel.apache.org/components/2.x/mina2-component.html 其中tip: Favor using Netty as Netty is a much more active maintained and popular project than Apache Mina currently is 支持使用Netty,因为Netty是一个比Apache Mina当前更活跃,更受青睐的项目

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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