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. 第1节 flume:9、flume的多个agent串联(级联)

    3.两个agent级联 需求分析: 第一个agent负责收集文件当中的数据,通过网络发送到第二个agent当中去,第二个agent负责接收第一个agent发送的数据,并将数据保存到hdfs上面去 第一 ...

  2. tmp note

    cat file.txt > /dev/null 2>&1 丢弃错误和标准输出 systemctl isolate multi-user.target 切换回多用户命令行模式 sy ...

  3. Shell替换数组元素之间的间隔符号

    Shell中的数组是这样表示的: arr=(1,2,3,4,5) 它们数组元素的间隔符号为逗号,如果我相把逗号替换为加号: echo ${arr//,/+} 输出: 1+2+3+4+5 这个表达式是我 ...

  4. 7. 配置undo表空间

    7. 配置undo表空间 undo日志可以存储在一个或多个undo表空间中,无需存储在系统表空间中. 要为MySQL实例配置单独的undo表空间,请执行以下步骤 [重要]: 只能在初始化新MySQL实 ...

  5. ixcache的蜜汁突发故障

    公元2018年 7月29日 晚上21点整,我司一直正常运行的ixcache线路异常断开. ??? 公司业务包含提供互联网接入服务,所以这个现象将会导致用户上网体验变差,网速变慢,看视频的速度下降等等, ...

  6. Python数据可视化库-Matplotlib(二)

    我们接着上次的继续讲解,先讲一个概念,叫子图的概念. 我们先看一下这段代码 import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.a ...

  7. Postfix telnet www.azengna.com 25 Connection Refused 但是localhost连接成功

    修改配置文件 vi /etc/postfix/main.cf 原先配置信息 .... inet_interfaces = all #inet_interfaces = $myhostname,loca ...

  8. Eclipse设置反编译插件

    有些项目我们想看看引入的包的源码的时候,因为打包好的.class文件的内容我们是看不懂的,但是又懒得去找源码文件的时候,就会用到反编译工具. 步骤: 1.安装反编译插件. 2.设置使用的反编译工具. ...

  9. 【转】反向AJAX

    原文链接:http://blog.csdn.net/lccone/article/details/7743886 反向Ajax的基本概念是客户端不必从服务器获取信息,服务器会把相关信息直接推送到客户端 ...

  10. 大数据学习——redis安装

    用源码工程来编译安装 / 到官网下载最新stable版 / 解压源码并进入目录 .tar.gz -C ./redis-src/ / make 如果报错提示缺少gcc,则安装gcc : yum inst ...