首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

转 mina 遇到的有关问题

2013-07-04 
转 mina 遇到的问题? ? 转:http://littcai.iteye.com/blog/227476?Socket服务器在启动是检测到端口被绑定

转 mina 遇到的问题

? ? 转:http://littcai.iteye.com/blog/227476

?

    Socket服务器在启动是检测到端口被绑定的话会抛出java.net.BindException:Address already in use: JVM_Bind;而MINA不会客户端在调用connect方法时,如果连接主机或端口失败,并不会抛出任何异常,跟踪MINA源码可知,实际调用的是AbstractPollingIoConnector类的connect0方法,该方法在发生连接异常时创建了一个failedFuture并返回。只有在客户端实际调用connFuture.getSession();时才会抛出RuntimeIoException异常。在断网(即网络不通)的情况下,抛出java.net.NoRouteToHostException: No route to host如果连接不到主机或端口并且设置了中断等待时间的情况下,抛出java.net.ConnectException: Connection refused如果连接不到主机或端口并且未设置了中断等待时间的情况下,不抛出异常,此时获得的session为NULL如果能连接到主机对应端口,但是未设置awaitUninterruptibly();此时获得的session也为NULLJava代码??转 mina 遇到的有关问题
    1. ConnectFuture?connFuture?=?connector.connect(new?InetSocketAddress("192.168.0.1",?12315));//发生连接异常时该行不会抛异常??
    2. connFuture.awaitUninterruptibly(1000);//如果不加这句,则连接异常时getSession()并不会抛异常,获得的SESSION为NULL??
    3. IoSession?session?=?connFuture.getSession();//取SESSION的时候才抛异常????

    ?

    ?未解之谜

    MINA的连接是长连接,这在服务器或客户端通讯中断exceptionCaught能捕获异常可以知道。我们也就不需要对客户端长连接再做心跳包的处理。不过不明白connector.setConnectTimeout(1);这个方法到底有什么作用???

    ?

    ??IDLE

    1.1.7版本中,session可以直接设置idle时间;

    2.0中需要如下代码设置idle时间:session.getConfig().setBothIdleTime(5);

热点排行