Apache MINA框架快速入门
一、为什么要用MINA框架
Apache Mina是一个网络通信应用框架,是基于TCP/IP、UDP/IP协议栈的通信框架,Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持,具有高性能,异常可控的优点。
二、原理图
三、下载jar包
https://www.apache.org/dyn/closer.lua/mina/mina/2.1.3/apache-mina-2.1.3-bin.zip
四、代码实现
服务器
package test0826.mina;import org.apache.mina.core.service.IoAcceptor;
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.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;/*** 服务器* @author : Bei-Zhen* @date : 2020-08-26 22:39*/
public class MinaServer {public static void main(String[] args) throws IOException {//1.创建IoService实例IoAcceptor acceptor = new NioSocketAcceptor();//2.设置过滤链 日志 编解码acceptor.getFilterChain().addLast("logger",new LoggingFilter());acceptor.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));//3.绑定IO处理器acceptor.setHandler(new MyServerHandler());//4.监听端口acceptor.bind(new InetSocketAddress(7777));System.out.println("服务器启动,并监听端口:7777");}
}class MyServerHandler extends IoHandlerAdapter {@Overridepublic void sessionCreated(IoSession session) throws Exception {System.out.println("服务器:会话被新创建...");session.write("我是服务器....");super.sessionCreated(session);}@Overridepublic void sessionClosed(IoSession session) throws Exception {System.out.println("服务器:当前会话关闭");super.sessionClosed(session);}@Overridepublic void sessionIdle(IoSession session, IdleStatus status) throws Exception {System.out.println("服务器:会话休眠中");super.sessionIdle(session, status);}@Overridepublic void exceptionCaught(IoSession session, Throwable cause) throws Exception {System.out.println("服务器发生异常");super.exceptionCaught(session, cause);}@Overridepublic void messageReceived(IoSession session, Object message) throws Exception {System.out.println("服务器接收消息:" + message);super.messageReceived(session, message);}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {System.out.println("服务器发送消息:" + message);super.messageSent(session, message);}@Overridepublic void inputClosed(IoSession session) throws Exception {System.out.println("服务器关闭:" + session);super.inputClosed(session);}
}
客户端
package test0826.mina;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.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;import java.net.InetSocketAddress;
import java.nio.charset.Charset;/*** 客户端* @author : Bei-Zhen* @date : 2020-08-26 23:04*/
public class MinaClient {public static void main(String[] args) {//1.创建IoService实例NioSocketConnector connector = new NioSocketConnector();//2.设置过滤链 日志 编解码connector.getFilterChain().addLast("logger",new LoggingFilter());connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));//3.绑定IO处理器connector.setHandler(new MyClientHandler());//4.连接地址ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",7777));System.out.println("客户端连接成功!");}
}class MyClientHandler extends IoHandlerAdapter {@Overridepublic void sessionCreated(IoSession session) throws Exception {System.out.println("客服端:会话被新创建...");session.write("我是客户端....");super.sessionCreated(session);}@Overridepublic void sessionClosed(IoSession session) throws Exception {System.out.println("客服端:当前会话关闭");super.sessionClosed(session);}@Overridepublic void sessionIdle(IoSession session, IdleStatus status) throws Exception {System.out.println("客服端:会话休眠中");super.sessionIdle(session, status);}@Overridepublic void exceptionCaught(IoSession session, Throwable cause) throws Exception {System.out.println("客服端发生异常");super.exceptionCaught(session, cause);}@Overridepublic void messageReceived(IoSession session, Object message) throws Exception {System.out.println("客服端接收消息:" + message);super.messageReceived(session, message);}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {System.out.println("客服端发送消息:" + message);super.messageSent(session, message);}@Overridepublic void inputClosed(IoSession session) throws Exception {System.out.println("客服端关闭:" + session);super.inputClosed(session);}
}
五、运行结果
服务器
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
服务器启动,并监听端口:7777
服务器:会话被新创建...
服务器发送消息:我是服务器....
服务器接收消息:我是客户端....
客户端
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
客户端连接成功!
客服端:会话被新创建...
客服端发送消息:我是客户端....
客服端接收消息:我是服务器....
Apache MINA框架快速入门相关推荐
- Quartz 框架快速入门(二)
尽可能的用声明式处理软件配置,其次才考虑编程式的方式.在上一篇<Quartz 框架快速入门(一)>中,如果我们要在 Job 启动之后改变它的执行时间和频度,必须去修改源代码重新编译.这种方 ...
- Quartz 框架快速入门(四)
Spring的scheduling.quartz包中对Quartz框架进行了封装,使得开发时不用写任何QuartSpring的代码就可以实现定时任务.Spring通过JobDetailBean,Met ...
- Quartz 框架快速入门(三)
在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Schedul ...
- 【完结】给新手的12大深度学习开源框架快速入门项目
文/编辑 | 言有三 这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpen ...
- java day53【 Mybatis框架概述 、 Mybatis 框架快速入门、自定义 Mybatis 框架 】
第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种 定义认为,框架是可被应用开发者定 ...
- 微信小程序wepy框架快速入门
微信小程序wepy框架快速入门 微信小程序简介 微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一 ...
- Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)
Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...
- MyBatis框架快速入门
MyBatis框架快速入门 入门案例 创建一个关于Mybatis项目 首先创建一个空项目,然后新建一个moudle,选择quickstart,接下来把模块放到空项目之下.即可 实现mybatis查询数 ...
- Go语言Web框架:Beego框架快速入门
文章目录 Beego框架快速入门 1.beego框架了解 2.MVC架构 3.环境搭建 4.beego的项目结构分析 5.Beego快速体验 6.Beego运行流程分析 7.Post案例实现 7.1前 ...
最新文章
- STM32 基础系列教程 11 – ADC 轮询
- DDCTF-2018-writeup(5misc)
- 深度学习(10)TensorFlow基础操作六: 数学运算
- 【转】LDA-linear discriminant analysis
- 渐进式加载 - 基础讲解
- (Demo3D 学习笔记)案例2:飞板传输货物,并按指定货位上架
- 使用百度地图API在页面添加百度地图应用
- 一百块组装可玩LOL的电脑
- 中级php工程师笔试,PHP工程师笔试题目及行测题型示例
- 微信提现(商户向商家转账)
- android lcd工作原理,Android display架构分析(二)
- SSL双向认证和单向认证原理
- mcldownload文件夹_download文件夹是什么?Win7系统download文件夹可以删除?
- 02 C/C++创建tcl自定义命令
- 如何在mac版chrome安装第三方插件
- C语言 常量和宏定义
- 模拟滚动条.......
- css动画让文字一行一行逐渐显示
- 威纶通触摸屏配方功能的使用方法示例
- conda配置清华源