step1:创建java工程,导入jar包

  

step2:在src下配置log4j.properties文件

 log4j.rootLogger=DEBUG,MINA,file
log4j.appender.MINA=org.apache.log4j.ConsoleAppender
log4j.appender.MINA.layout=org.apache.log4j.PatternLayout
log4j.appender.MINA.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS}%-5p%c{1}%x-%m%n
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/minademos.log
log4j.appender.file.MaxFileSize=5120KB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[VAMS][%d]%p|%m|[%t]%C.%M(%L)%n

step3:服务器端代码

 package com.per.mina.server;

 import java.net.InetSocketAddress;
import java.nio.charset.Charset; import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor; import com.per.mina.server.handler.Demo1ServerHandler; public class Demo1Server {
private static Logger logger=Logger.getLogger(Demo1Server.class);
private static int port=3005;
public static void main(String[] args) {
IoAcceptor acceptor=null;//创建连接
try {
acceptor=new NioSocketAcceptor();//创建一个非阻塞的serverdaunt的Socket
//添加消息过滤器
acceptor.getFilterChain().addLast("codec",
new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("utf-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())));
//设置读取数据的缓冲区大小
acceptor.getSessionConfig().setReadBufferSize(2048);
//读写通道10 秒内无操作进入空闲状态
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
//绑定逻辑处理器
acceptor.setHandler(new Demo1ServerHandler());//添加业务处理 //绑定端口
acceptor.bind(new InetSocketAddress(port));
logger.info("服务器端启动成功... 端口号为:"+port);
} catch (Exception e) {
logger.error("服务器端启动异常...", e);
e.printStackTrace();
} }
}
 package com.per.mina.server.handler;

 import java.util.Date;

 import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession; public class Demo1ServerHandler extends IoHandlerAdapter {
private static Logger logger=Logger.getLogger(Demo1ServerHandler.class); @Override
public void sessionCreated(IoSession session) throws Exception {
logger.info("服务器端与客户端创建连接");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
logger.info("服务端与客户端连接打开");
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String msg=message.toString();
logger.info("服务端接收到的数据为:"+msg);
if("bye".equals(msg)){
session.close();
}
Date date=new Date();
session.write(date);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
//session.closeNow();//控制长连接与短连接
logger.info("服务端发送信息成功...");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
super.sessionClosed(session);
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
logger.info("服务端进入空闲状态...");
}
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
logger.error("服务端发送异常", cause);
} }

step4:客户端代码

 package com.per.mina.client;

 import java.net.InetSocketAddress;
import java.nio.charset.Charset; import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.per.mina.client.handler.MinaClientDemo1Handler; public class MinaClientDemo1 {
//private static Logger logger=Logger.getLogger(MinaClientDemo1.class);
private static Logger logger=LoggerFactory.getLogger(MinaClientDemo1.class);
private static String HOST="127.0.0.1";
private static int PORT=3005;
public static void main(String[] args) {
//创建一个非阻塞的客户端程序
IoConnector connector=new NioSocketConnector();//创建连接 //设置连接超时时间
connector.setConnectTimeoutMillis(30000);
//添加过滤器
connector.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new TextLineCodecFactory(
Charset.forName("utf-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())));
//添加业务逻辑处理器类
connector.setHandler(new MinaClientDemo1Handler());//添加业务处理
IoSession session=null;
try {
ConnectFuture future=connector.connect(new InetSocketAddress(HOST, PORT));//创建连接
future.awaitUninterruptibly();//等待连接完成
session=future.getSession();//获得session
session.write("test mina");//发送消息 } catch (Exception e) {
logger.error("客户端连接异常...", e);
}
session.getCloseFuture().awaitUninterruptibly();//等待连接断开
connector.dispose();
}
}
package com.per.mina.client.handler;

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession; public class MinaClientDemo1Handler extends IoHandlerAdapter{
private static Logger logger=Logger.getLogger(MinaClientDemo1Handler.class);
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String msg=message.toString();
logger.info("客户端接收到的信息为:"+msg);
} @Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
logger.error("客户端发生异常",cause);
}
}

step5:进行测试,先运行服务端,再运行客户端

初识mina框架的更多相关文章

  1. mina框架详解

     转:http://blog.csdn.net/w13770269691/article/details/8614584 mina框架详解 分类: web2013-02-26 17:13 12651人 ...

  2. GPS部标平台的架构设计(三) 基于struts+spring+hibernate+ibatis+quartz+mina框架开发GPS平台

    注意,此版本是2014年研发的基于Spring2.5和Struts2的版本,此版本的源码仍然销售,但已不再提供源码升级的服务,因为目前我们开发的主流新版本是2015-2016年近一年推出的基于spri ...

  3. 基于Java Mina框架的部标808服务器设计和开发

    在开发部标GPS平台中,部标808GPS服务器是系统的核心关键,决定了部标平台的稳定性和行那个.Linux服务器是首选,为了跨平台,开发语言选择Java自不待言. 我们为客户开发的部标服务器基于Min ...

  4. Android Mina框架的学习笔记

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...

  5. 关于mina框架EMFILE: open too many files exception的处理

    做项目的时候,用到了mina框架,与server进行交互.由于采用的是短连接+心跳包+断线重连的方式,因此网络不稳定的时候经常会出现断线重连. 那么有时候偶尔会出现EMFILE: open too m ...

  6. 基于MINA框架快速开发网络应用程序

    1.MINA框架简介 MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架.通过使用M ...

  7. 使用Mina框架开发 QQ Android 客户端

    Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步AP ...

  8. Mina框架断包、粘包问题解决方式

    Mina框架断包.粘包问题解决方式 Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(当然.也能够提供JAVA 对象的序 ...

  9. Mina框架与Spring整合配置文件

    Mina框架与Spring的整合事实上非常easy,主要是要弄清楚要注入的属性的名称,进而选择合适的注入方法. 关于Spring的四种注入方法请还有一篇文章:spring依赖注入的四种方式 <? ...

随机推荐

  1. scrapy example

    scrapy example scrapy with pycharm import win32api 出现ImportError: DLL load failed 错误的解决方法 pip instal ...

  2. mysql单实例多库与多实例单库

    一.单实例多库: 一个mysql实例,创建多个数据目录. 规划: 实例路径:/usr/local/mysql 数据目录路径: (1)/usr/local/mysql/data (2)/usr/loca ...

  3. CentOS 7的docker安装初始化

    1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2: 添加软件源信息 添加阿里源这样下载 ...

  4. transformer模型解读

    最近在关注谷歌发布关于BERT模型,它是以Transformer的双向编码器表示.顺便回顾了<Attention is all you need>这篇文章主要讲解Transformer编码 ...

  5. python-----定制群发微信消息

    如何使用表格中的信息群发微信消息? 如何读取csv? →   使用内置模块csv 如何按对应信息发送到微信?→  使用第三方库wxpy 以下代码素材自取:链接:https://pan.baidu.co ...

  6. Java中的事务——全局事务与本地事务

    转载,原文来源 http://www.hollischuang.com Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务.这是从事务的实现角度区 ...

  7. 【51nod 1092】 回文字符串(区间DP)

    回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符串都可以通过向中间添加一些字符,使之变为回文字符串. 例如:abbc 添加2个字符可以变为 acbbca,也可以添加3 ...

  8. 【HDU 6005】Pandaland(Dijkstra)

    Problem Description Mr. Panda lives in Pandaland. There are many cities in Pandaland. Each city can ...

  9. BNUOJ 6378 无题I

    无题I Time Limit: 10000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 22346 ...

  10. python015 Python3 函数

    Python3 函数函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...