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框架提供了非阻塞I/O模型,允许处理大量并发连接。然而,在某些情况下,特别是在断线重连的机制中,可能会...
在本文中,我们将深入探讨Mina的核心概念,包括连接管理、心跳机制以及断线重连策略。 首先,让我们理解"Mina连接"。在Mina中,连接是指客户端与服务端之间建立的通信链路。它支持多种传输协议,如TCP/IP(Socket)...
**Mina通信框架详解** Apache Mina 是一个高度可扩展且功能丰富的网络应用开发框架,主要用在Java环境中。这个“Mina通信demo”是为了帮助初学者理解和掌握Mina的基本用法而创建的。通过分析这个demo,我们可以深入...
Android客户端需要处理好网络权限问题,并考虑到移动设备的网络环境可能变化,需要适当地处理网络断开和重连的情况。 4. **MINA的过滤器机制**:MINA的FilterChain允许开发者插入自定义的过滤器,每个过滤器可以...
- **连接管理**:保持长连接需要考虑网络波动、设备休眠等因素,确保在异常情况下能自动重连。 - **心跳机制**:为了检测连接是否断开,通常需要设置心跳包,定时发送和接收,防止连接因长时间无数据传输而被网络...
如果服务器在一段时间内没有收到心跳包,可能会认为客户端已经断开,从而触发相应的处理逻辑,比如关闭连接或者触发重连机制。 在Mina的配置中,开发者可以通过设置Filter链来实现心跳包的处理。例如,可以创建一个...
本资料包主要关注如何在Android端集成Mina框架,并解决断线重连及多端口问题。 首先,Mina框架是Apache软件基金会的一个项目,它提供了一个事件驱动、异步的I/O模型,使得开发者可以构建高性能、高可用性的网络应用...
根据异常类型,可以选择重连、关闭连接或记录错误日志。 5. **客户端连接**:在客户端,同样需要配置`ClientBootstrap`,并通过`connect()`方法建立到服务器的连接。对于长连接,客户端也需要实现心跳机制。 在...
在Android开发中,Mina可以帮助开发者轻松地处理TCP/IP和UDP/IP通信,尤其适用于实现长连接和断线重连功能。下面将详细介绍Mina框架在Android中的应用及其核心概念。 1. **Mina框架基础** Mina源于Java平台,但在...
可以创建一个后台服务来维护连接,并在必要时进行重连。同时,mina提供了异步API,适应Android的多线程环境。 **4. 服务端实现** 服务端使用mina来处理多个并发的客户端连接,通过配置Acceptor监听特定端口,并...
4. **超时检测**:如果在预设的超时时间内没有接收到对方的心跳包,那么判断连接可能已经断开,可以触发重连机制或者通知应用程序连接已断开。 5. **连接恢复**:一旦发现连接断开,Mina提供了一套完整的连接恢复...
此外,为了保持健壮性和安全性,通常还会包含身份验证、权限控制、心跳检测和断线重连等机制。 总而言之,Mina聊天室是一个利用Apache Mina构建的实时通信应用,它展示了如何利用Mina框架处理网络通信,以及如何与...
实现:手机安卓APP与服务器建立长连接,客户端通过心跳机制保活,并在网络切换比如4G与WiFi的切换以及网络不稳定(服务器坏掉,网卡)造成的长连接断开...采用框架:服务器端和安卓开发均采用Mina框架进行快速开发。
如果接收方未在规定时间内发送响应,发送方则可以判定连接出现问题,并进行重连或通知用户等操作。 5. **心跳超时处理**:在MINA中,心跳超时处理可以通过监听器(Listener)或过滤器(Filter)来实现。当心跳超...
3. **过滤器链**:MINA采用过滤器链的设计模式,允许开发者通过添加、删除或重排序过滤器来实现特定的功能,如数据编码解码、安全加密等。这增加了代码的可复用性和模块化。 4. **丰富的API**:MINA提供了一套全面...
同时,MINA还提供了异常处理机制,当网络异常发生时,会触发相应的事件,开发者可以据此进行错误恢复或重连操作。 在Android Studio环境下开发MINA应用,需要注意Android的多线程模型和资源管理。由于Android主线程...
此外,你可能还需要处理断线重连、心跳机制、错误处理等常见问题。 压缩包中的`html`文件可能是用于展示前端聊天界面的HTML和JavaScript代码,这部分通常包括创建WebSocket连接、发送和接收消息的函数,以及用户...
Mina在设计上充分考虑到了网络通信中的各种异常情况,如断线重连、心跳检测等,并提供了相应的处理机制,确保服务的稳定性和可靠性。 #### 三、Mina框架的核心组件 Mina的核心组件主要包括以下几部分: ##### 3.1...
8. **异常处理**:理解如何处理网络通信中的各种异常情况,如断线重连、错误命令响应等。 9. **性能优化**:学习如何调整Mina FTPServer的性能,例如通过缓冲区管理和线程池配置来提升服务器处理能力。 10. **安全...
- 错误处理:建立完善的错误处理机制,如异常捕获和重试策略,以提高应用的健壮性。 通过以上步骤,你将能够掌握MINA框架在Android应用中的实际运用,解决可能出现的常见问题,从而构建出稳定、高效的网络通信功能...