初识mina框架
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框架的更多相关文章
- mina框架详解
转:http://blog.csdn.net/w13770269691/article/details/8614584 mina框架详解 分类: web2013-02-26 17:13 12651人 ...
- GPS部标平台的架构设计(三) 基于struts+spring+hibernate+ibatis+quartz+mina框架开发GPS平台
注意,此版本是2014年研发的基于Spring2.5和Struts2的版本,此版本的源码仍然销售,但已不再提供源码升级的服务,因为目前我们开发的主流新版本是2015-2016年近一年推出的基于spri ...
- 基于Java Mina框架的部标808服务器设计和开发
在开发部标GPS平台中,部标808GPS服务器是系统的核心关键,决定了部标平台的稳定性和行那个.Linux服务器是首选,为了跨平台,开发语言选择Java自不待言. 我们为客户开发的部标服务器基于Min ...
- Android Mina框架的学习笔记
Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络 ...
- 关于mina框架EMFILE: open too many files exception的处理
做项目的时候,用到了mina框架,与server进行交互.由于采用的是短连接+心跳包+断线重连的方式,因此网络不稳定的时候经常会出现断线重连. 那么有时候偶尔会出现EMFILE: open too m ...
- 基于MINA框架快速开发网络应用程序
1.MINA框架简介 MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架.通过使用M ...
- 使用Mina框架开发 QQ Android 客户端
Apache MINA是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序.它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步AP ...
- Mina框架断包、粘包问题解决方式
Mina框架断包.粘包问题解决方式 Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(当然.也能够提供JAVA 对象的序 ...
- Mina框架与Spring整合配置文件
Mina框架与Spring的整合事实上非常easy,主要是要弄清楚要注入的属性的名称,进而选择合适的注入方法. 关于Spring的四种注入方法请还有一篇文章:spring依赖注入的四种方式 <? ...
随机推荐
- 删除mysql中user为空用户,mysql空密码
进入mysql数据库 mysql -uroot -p 查看用户信息 select user,host ,Password from mysql.user; 如下图: 删除user为空用户 delete ...
- 【HIHOCODER 1576】 子树中的最小权值(线段树维护DFS序)
描述 给定一棵N个节点的树,编号1~N.其中1号节点是根,并且第i个节点的权值是Vi. 针对这棵树,小Hi会询问小Ho一系列问题.每次小Hi会指定一个节点x,询问小Ho以x为根的子树中,最小的权值是多 ...
- HDU 1087 Super Jumping! Jumping! Jumping! (LIS的最大和)
题意: 给定n个数的序列, 找出最长上升子序列和. 分析: #include<cstdio> #include<iostream> #include<queue> ...
- 如何用scanf读入一个string
#include <stdio.h> #include <string> using namespace std; int main() { string a; a.resiz ...
- 【02】一个实现h5的拖放的整个过程-魔芋
[02]拖放的整个过程-魔芋 01,创建2个元素,一个为拖放元素dragEle,一个是存放的元素targetEle.添加一些样式. <div class="dragEle&qu ...
- coraldraw快捷键
显示导航窗口(Navigator window) [N] 运行 Visual Basic 应用程序的编辑器 [Alt]+[F11] 保存当前的图形 [Ctrl]+[S] 打开编辑文本对话框 ...
- 遇到的Ajax相关问题
- C++中,什么叫类,结构,联合?
在C++中 class 和 struct 本质上一样 可以互用class的成员默认是private的,struct的成员默认是public的但一般习惯把成员变量隐藏的用class申明, 成员变量可以公 ...
- PHP字符串的替换(preg_replace)
/* 正则表达式 preg_replace() */ $str = array( "如果没有一些http://www.abc.com特殊的<b>替换</b>需5求( ...
- ES6__数据结构 Map
/* 数据结构 Map */ /* * 字典:是用来存储不重复的key的hash结构.不同于集合(Set)的是,字典使用的是[键,值]的形式来储存数据的. *javaScript 的对象(Object ...