一、为什么要用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框架快速入门相关推荐

  1. Quartz 框架快速入门(二)

    尽可能的用声明式处理软件配置,其次才考虑编程式的方式.在上一篇<Quartz 框架快速入门(一)>中,如果我们要在 Job 启动之后改变它的执行时间和频度,必须去修改源代码重新编译.这种方 ...

  2. Quartz 框架快速入门(四)

    Spring的scheduling.quartz包中对Quartz框架进行了封装,使得开发时不用写任何QuartSpring的代码就可以实现定时任务.Spring通过JobDetailBean,Met ...

  3. Quartz 框架快速入门(三)

    在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Schedul ...

  4. 【完结】给新手的12大深度学习开源框架快速入门项目

    文/编辑 | 言有三 这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpen ...

  5. java day53【 Mybatis框架概述 、 Mybatis 框架快速入门、自定义 Mybatis 框架 】

    第1章 框架概述 1.1 什么是框架 1.1.1 什么是框架 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种 定义认为,框架是可被应用开发者定 ...

  6. 微信小程序wepy框架快速入门

    微信小程序wepy框架快速入门 微信小程序简介 微信小程序,简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一 ...

  7. Python学习笔记--10.Django框架快速入门之后台管理admin(书籍管理系统)

    Python学习笔记--10.Django框架快速入门之后台管理 一.Django框架介绍 二.创建第一个Django项目 三.应用的创建和使用 四.项目的数据库模型 ORM对象关系映射 sqlite ...

  8. MyBatis框架快速入门

    MyBatis框架快速入门 入门案例 创建一个关于Mybatis项目 首先创建一个空项目,然后新建一个moudle,选择quickstart,接下来把模块放到空项目之下.即可 实现mybatis查询数 ...

  9. Go语言Web框架:Beego框架快速入门

    文章目录 Beego框架快速入门 1.beego框架了解 2.MVC架构 3.环境搭建 4.beego的项目结构分析 5.Beego快速体验 6.Beego运行流程分析 7.Post案例实现 7.1前 ...

最新文章

  1. STM32 基础系列教程 11 – ADC 轮询
  2. DDCTF-2018-writeup(5misc)
  3. 深度学习(10)TensorFlow基础操作六: 数学运算
  4. 【转】LDA-linear discriminant analysis
  5. 渐进式加载 - 基础讲解
  6. (Demo3D 学习笔记)案例2:飞板传输货物,并按指定货位上架
  7. 使用百度地图API在页面添加百度地图应用
  8. 一百块组装可玩LOL的电脑
  9. 中级php工程师笔试,PHP工程师笔试题目及行测题型示例
  10. 微信提现(商户向商家转账)
  11. android lcd工作原理,Android display架构分析(二)
  12. SSL双向认证和单向认证原理
  13. mcldownload文件夹_download文件夹是什么?Win7系统download文件夹可以删除?
  14. 02 C/C++创建tcl自定义命令
  15. 如何在mac版chrome安装第三方插件
  16. C语言 常量和宏定义
  17. 模拟滚动条.......
  18. css动画让文字一行一行逐渐显示
  19. 威纶通触摸屏配方功能的使用方法示例
  20. conda配置清华源

热门文章

  1. 鱼c论坛 python课后题pdf_[全套55讲]鱼C论坛小甲鱼Python的课后题.pdf
  2. Python3.X下安装Scrapy (转自鱼c论坛作者lumber2388779)
  3. java车辆租赁管理系统
  4. selenium驱动新版edge
  5. 第四周 并联电阻的值
  6. 配置文件中连接数据库
  7. 手把手教你如何玩转插件:分页插件(Pagehelper)
  8. 华为云WeLink学院走进东莞松山湖,助力制造业再升级
  9. 上马”纯视觉L2/L2+级ADAS方案,特斯拉并非第一家
  10. RV1126编译及烧写