`

Mina重连

 
阅读更多
import com.sun.swing.internal.plaf.metal.resources.metal;
import com.sun.swing.internal.plaf.metal.resources.metal_sv;
import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketConnector;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

import java.net.ConnectException;
import java.net.InetSocketAddress;

public class MinaClient {
    public SocketConnector socketConnector;

    public static final int DEFAULT_CONNECT_TIMEOUT = 5;

    public static final String HOST = ”192.168.0.100″;

    public static final int PORT = 1100;

    public static IoSession ioSession;

    public MinaClient() {
        init();
    }

    public void init() {
        socketConnector = new NioSocketConnector();

        // 
        socketConnector.getSessionConfig().setKeepAlive(true);

        socketConnector.setConnectTimeoutMillis(DEFAULT_CONNECT_TIMEOUT * 1000);

        socketConnector.getFilterChain().addLast(“codec”, new ProtocolCodecFilter(new TextLineCodecFactory()));

        ClientIoHandler ioHandler = new ClientIoHandler();
        socketConnector.setHandler(ioHandler);
        InetSocketAddress addr = new InetSocketAddress(HOST, PORT);
        ConnectFuture cf = socketConnector.connect(addr);
        cf.awaitUninterruptibly();
        ioSession = cf.getSession();
    }

    public void sendMessage(final String msg) {
        try {
            if (ioSession != null) {
                if (ioSession.isConnected()) {//
                    ioSession.write(msg);//
                    System.out.println(“send message ” + msg);
                } else {
                    reconnect();
                }
            }

        } catch (RuntimeIoException e) {
            e.printStackTrace();
        }
    }

    private void reconnect() {
        InetSocketAddress addr = new InetSocketAddress(HOST, PORT);
        ConnectFuture cf = socketConnector.connect(addr);
        cf.awaitUninterruptibly();
        ioSession = cf.getSession();
    }

    public static void main(String[] args) throws InterruptedException {
        MinaClient clent = new MinaClient();
        for (int i = 0; i < 99999; i++) {
            Thread.sleep(2000);
            System.err.println(i);
            clent.sendMessage(“Hello World ” + i);
        }
        clent.getSocketConnector().dispose();

    }

    public SocketConnector getSocketConnector() {
        return socketConnector;
    }

    public void setSocketConnector(SocketConnector socketConnector) {
        this.socketConnector = socketConnector;
    }

}

class ClientIoHandler extends IoHandlerAdapter {

    private void releaseSession(IoSession session) throws Exception {
        System.out.println(“releaseSession”);
        if (session.isConnected()) {
            session.close(true);
        }
    }

    @Override
    public void sessionOpened(IoSession session) throws Exception {
        System.out.println(“sessionOpened”);
    }

    @Override
    public void sessionClosed(IoSession session) throws Exception {
        System.out.println(“sessionClosed-c”);
    }

    @Override
    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
        System.out.println(“sessionIdle”);
        try {
            releaseSession(session);
        } catch (RuntimeIoException e) {
        }
    }

    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        System.out.println(“Receive Server message ” + message);

    }

    @Override
    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
        System.out.println(“exceptionCaught”);
        cause.printStackTrace();
        releaseSession(session);
    }

    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
        System.out.println(“messageSent”);
        super.messageSent(session, message);
    }

}

 

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

import java.net.InetSocketAddress;

public class MinaServer {

    public void init() throws Exception{
        SocketAcceptor acceptor = new NioSocketAcceptor(Runtime.getRuntime().availableProcessors() + 1);
        //设置解析器
        DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
        chain.addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));

        acceptor.setHandler(new BexnHandler());
        acceptor.bind(new InetSocketAddress(1100));
        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,5);

    }
    public MinaServer() throws Exception {
        init();
    }

    public static void main(String[] args) throws Exception {
        new MinaServer();
        System.out.println("Server start");
    }
}

class BexnHandler extends IoHandlerAdapter {
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        System.out.println("messageReceived " + message);
        super.messageReceived(session, message);
        session.write("messageReceived "+message);

    }

    @Override
    public void exceptionCaught(IoSession session, Throwable cause)
            throws Exception {
        if (session.isConnected()) {
            session.close(true);
        }
    }

    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
//        session.close();
    }

    @Override
    public void sessionClosed(IoSession session) throws Exception {
        super.sessionClosed(session);
        System.out.println("sessionClosed-s");
    }

    @Override
    public void sessionCreated(IoSession session) throws Exception {
    }

    @Override
    public void sessionIdle(IoSession session, IdleStatus status)
            throws Exception {
        session.close(true);
    }

    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
    }
}

 

分享到:
评论

相关推荐

    mina连接 mina心跳连接 mina断线重连

    mina连接,mina心跳连接,mina断线重连。其中客户端可直接用在android上。根据各方参考资料,经过自己的理解弄出来的。CSDN的资源分太难得了。

    MINA断线重连死锁解决

    mina客户端,服务器端的demo

    mina通信demo

    mina通信的一个简单demo,方便初学者研究,有问题请指正!

    Android端集成Mina框架实现长连接,完美解决断线重连问题,修复断线重连打开多端口问题.zip

    Android端集成Mina框架实现长连接,完美解决断线重连问题,修复断线重连打开多端口问题.zip

    Android Mina框架使用

    Android端集成Mina框架实现长连接,完美解决断线重连问题,修复断线重连打开多端口问题。

    APP断线重连的实现(Mina框架,含服务器端代码)

    实现:手机安卓APP与服务器建立长连接,客户端通过心跳机制保活,并在网络切换比如4G与WiFi的切换以及网络不稳定(服务器坏掉,网卡)造成的长连接断开...采用框架:服务器端和安卓开发均采用Mina框架进行快速开发。

    mina-guice:Guice对Apache MINA的支持

    Guice对Apache MINA的支持这是一个简单的库,可让您将Apache MINA项目与Guice 3.0集成在一起。 这样,您可以根据需要在Guice的IoC容器中配置尽可能多的MINA应用程序。 特征支持MINA 2.0.9 支持Guice 3.0 除Apache ...

    weui-mina:适用于小程序mina框架的weui组件

    weui-mina:lipstick:一款致力于微信小程序组件开发的开源库:building_construction:组件: 漂亮的登录授权页: 仿 BootStrap 进度条组件: 仿 weui.js actionsheet 组件页面有些功能无法用组件实现,只能写成页面了...

    一个Java码农的Node之旅

    4.连接断了需要实现下重连机制吧?服务器端写完了还有客户端,也需要帮助指导下实现,问题诸多。如果有现成的轮子偷懒的话,socket.io比较适合:1.轻量级、扩展便捷、API简单易用。2.周边完善,重连、路由、隔离、单...

    google-drive-ftp-adapter:Google Drive FTP Adapter通过FTP协议连接到Google Drive

    谷歌驱动器ftp适配器消息最新版本v...特征独立Java应用程序(Java 8) Apache Mina FTP服务器Google Drive API v3 SQLite索引缓存每10秒进行一次索引缓存同步具有权限的用户管理支持所有FTP命令: 列出文件夹和文件重

    java开源包4

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    JAVA上百实例源码以及开源项目源代码

     可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序  Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和...

    JAVA上百实例源码以及开源项目

     可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序  Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和...

    java开源包1

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包11

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包2

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包3

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    java开源包6

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

Global site tag (gtag.js) - Google Analytics