转 mina 遇到的有关问题
转 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代码??- ConnectFuture?connFuture?=?connector.connect(new?InetSocketAddress("192.168.0.1",?12315));//发生连接异常时该行不会抛异常??
- connFuture.awaitUninterruptibly(1000);//如果不加这句,则连接异常时getSession()并不会抛异常,获得的SESSION为NULL??
- IoSession?session?=?connFuture.getSession();//取SESSION的时候才抛异常????
?
?未解之谜MINA的连接是长连接,这在服务器或客户端通讯中断exceptionCaught能捕获异常可以知道。我们也就不需要对客户端长连接再做心跳包的处理。不过不明白connector.setConnectTimeout(1);这个方法到底有什么作用???
?
??IDLE1.1.7版本中,session可以直接设置idle时间;
2.0中需要如下代码设置idle时间:session.getConfig().setBothIdleTime(5);