`

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框架提供了非阻塞I/O模型,允许处理大量并发连接。然而,在某些情况下,特别是在断线重连的机制中,可能会...

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

    在本文中,我们将深入探讨Mina的核心概念,包括连接管理、心跳机制以及断线重连策略。 首先,让我们理解"Mina连接"。在Mina中,连接是指客户端与服务端之间建立的通信链路。它支持多种传输协议,如TCP/IP(Socket)...

    mina通信demo

    **Mina通信框架详解** Apache Mina 是一个高度可扩展且功能丰富的网络应用开发框架,主要用在Java环境中。这个“Mina通信demo”是为了帮助初学者理解和掌握Mina的基本用法而创建的。通过分析这个demo,我们可以深入...

    MINA长连接框架实现通讯

    Android客户端需要处理好网络权限问题,并考虑到移动设备的网络环境可能变化,需要适当地处理网络断开和重连的情况。 4. **MINA的过滤器机制**:MINA的FilterChain允许开发者插入自定义的过滤器,每个过滤器可以...

    Android-MinaSocket一款基于Mina的Socket长连接库

    - **连接管理**:保持长连接需要考虑网络波动、设备休眠等因素,确保在异常情况下能自动重连。 - **心跳机制**:为了检测连接是否断开,通常需要设置心跳包,定时发送和接收,防止连接因长时间无数据传输而被网络...

    mina心跳包机制

    如果服务器在一段时间内没有收到心跳包,可能会认为客户端已经断开,从而触发相应的处理逻辑,比如关闭连接或者触发重连机制。 在Mina的配置中,开发者可以通过设置Filter链来实现心跳包的处理。例如,可以创建一个...

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

    本资料包主要关注如何在Android端集成Mina框架,并解决断线重连及多端口问题。 首先,Mina框架是Apache软件基金会的一个项目,它提供了一个事件驱动、异步的I/O模型,使得开发者可以构建高性能、高可用性的网络应用...

    基于Apache Mina实现的TCP长连接和短连接实例

    根据异常类型,可以选择重连、关闭连接或记录错误日志。 5. **客户端连接**:在客户端,同样需要配置`ClientBootstrap`,并通过`connect()`方法建立到服务器的连接。对于长连接,客户端也需要实现心跳机制。 在...

    Android Mina框架使用

    在Android开发中,Mina可以帮助开发者轻松地处理TCP/IP和UDP/IP通信,尤其适用于实现长连接和断线重连功能。下面将详细介绍Mina框架在Android中的应用及其核心概念。 1. **Mina框架基础** Mina源于Java平台,但在...

    mina长连接

    可以创建一个后台服务来维护连接,并在必要时进行重连。同时,mina提供了异步API,适应Android的多线程环境。 **4. 服务端实现** 服务端使用mina来处理多个并发的客户端连接,通过配置Acceptor监听特定端口,并...

    Mina开源框架 心跳机制详解

    4. **超时检测**:如果在预设的超时时间内没有接收到对方的心跳包,那么判断连接可能已经断开,可以触发重连机制或者通知应用程序连接已断开。 5. **连接恢复**:一旦发现连接断开,Mina提供了一套完整的连接恢复...

    mina写的聊天室

    此外,为了保持健壮性和安全性,通常还会包含身份验证、权限控制、心跳检测和断线重连等机制。 总而言之,Mina聊天室是一个利用Apache Mina构建的实时通信应用,它展示了如何利用Mina框架处理网络通信,以及如何与...

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

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

    mina 心跳

    如果接收方未在规定时间内发送响应,发送方则可以判定连接出现问题,并进行重连或通知用户等操作。 5. **心跳超时处理**:在MINA中,心跳超时处理可以通过监听器(Listener)或过滤器(Filter)来实现。当心跳超...

    高性能Java网络框架 MINA

    3. **过滤器链**:MINA采用过滤器链的设计模式,允许开发者通过添加、删除或重排序过滤器来实现特定的功能,如数据编码解码、安全加密等。这增加了代码的可复用性和模块化。 4. **丰富的API**:MINA提供了一套全面...

    Android平台MINA框架使用详细解析

    同时,MINA还提供了异常处理机制,当网络异常发生时,会触发相应的事件,开发者可以据此进行错误恢复或重连操作。 在Android Studio环境下开发MINA应用,需要注意Android的多线程模型和资源管理。由于Android主线程...

    websocket+java服务器(mina)

    此外,你可能还需要处理断线重连、心跳机制、错误处理等常见问题。 压缩包中的`html`文件可能是用于展示前端聊天界面的HTML和JavaScript代码,这部分通常包括创建WebSocket连接、发送和接收消息的函数,以及用户...

    高性能网络架构Mina框架 下载

    Mina在设计上充分考虑到了网络通信中的各种异常情况,如断线重连、心跳检测等,并提供了相应的处理机制,确保服务的稳定性和可靠性。 #### 三、Mina框架的核心组件 Mina的核心组件主要包括以下几部分: ##### 3.1...

    ftpserver mina框架,适合学习

    8. **异常处理**:理解如何处理网络通信中的各种异常情况,如断线重连、错误命令响应等。 9. **性能优化**:学习如何调整Mina FTPServer的性能,例如通过缓冲区管理和线程池配置来提升服务器处理能力。 10. **安全...

    基于Android开发MINA框架使用详解

    - 错误处理:建立完善的错误处理机制,如异常捕获和重试策略,以提高应用的健壮性。 通过以上步骤,你将能够掌握MINA框架在Android应用中的实际运用,解决可能出现的常见问题,从而构建出稳定、高效的网络通信功能...

Global site tag (gtag.js) - Google Analytics