Apache 的Mina(Multipurpose Infrastructure Networked Applications)
是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它
提供了一个抽象的、事件驱动的异步API,使Java NIO 在各种传输协议(如
TCP/IP,UDP/IP 协议等)下快速高效开发。
---建个服务端和客户端试试
1.建立个服务端
public class Demo1Server {
private static int PORT = 3005;
private static Logger logger=Logger.getLogger(Demo1Server.class);
public static void main(String[] args) {
IoAcceptor acceptor = null;
try {
acceptor = new NioSocketAcceptor();
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("连接服务成功");
} catch (IOException e) {
logger.error("连接出错"+e.toString());
e.printStackTrace();
}
}
这里是业务处理
package com.itcast.service.imp;
import java.util.Date;
import org.apache.log4j.Logger;
import org.apache.mina.common.IdleStatus;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
/**
* cong
* @author yt
*
*/
public class Demo1ServerHandler extends IoHandlerAdapter{
private static Logger logger=Logger.getLogger(Demo1ServerHandler.class);
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
super.exceptionCaught(session, cause);
logger.info("出错了..."+cause);
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String msg=message.toString();
System.out.println(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.close();
logger.info("发送消息..........");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
super.sessionClosed(session);
logger.info("服务关闭成功");
}
@Override
public void sessionCreated(IoSession session) throws Exception {
super.sessionCreated(session);
logger.info("服务与客户连接成功!");
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
super.sessionIdle(session, status);
logger.info("空闲时刻......");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
super.sessionOpened(session);
logger.info("服务与客户端连接打开成功!");
}
}
---客户端测试
package com.itcast.client.demo;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.log4j.Logger;
import org.apache.mina.common.ConnectFuture;
import org.apache.mina.common.IoConnector;
import org.apache.mina.common.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.NioSocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import com.itcast.client.demo.imp.MineClentHander;
public class MineClient1Demo {
/**
* @param args
* 这里涉及到长连接和短连接..........
*/
private static Logger log = Logger.getLogger(MineClient1Demo.class);
private static int PORT = 3005;
private static String URL = "10.2.15.19";
public static void main(String[] args) {
log.info("客户端测试........");
IoConnector connector = new NioSocketConnector();// 创建连接
connector.setConnectTimeout(30000);
//过滤utf-8
connector.getFilterChain().addLast(
"codec",
new ProtocolCodecFilter(new TextLineCodecFactory(Charset
.forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())));
connector.setHandler(new MineClentHander());
//业务处理
IoSession session=null;
try{
ConnectFuture fauter=connector.connect(new InetSocketAddress(URL, PORT));
fauter.awaitUninterruptibly();//等待创建连接完成
session=fauter.getSession();
session.write("君兽你是个怪兽");
}
catch(Exception ex)
{
log.error(ex.toString());
}
session.getCloseFuture().awaitUninterruptibly();//等待断开连接
connector.dispose();
}
}
--业务处理
package com.itcast.client.demo.imp;
import org.apache.log4j.Logger;
import org.apache.mina.common.IoHandlerAdapter;
import org.apache.mina.common.IoSession;
public class MineClentHander extends IoHandlerAdapter{
private static Logger log=Logger.getLogger(MineClentHander.class);
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
log.error("客户端错误消息:"+cause);
super.exceptionCaught(session, cause);
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
String msg=message.toString();
log.info(msg+".........................客户端消息");
}
}
相关推荐
java mina框架使用总结
Android端集成Mina框架实现长连接,完美解决断线重连问题,修复断线重连打开多端口问题。
nio的经典框架mina 在此基础上发展的netty是nio经典之中的经典
阻塞和非阻塞io的简单通信程序,自己写的(写的不好)放这里做个备份 博文链接:https://javag.iteye.com/blog/221595
Android 使用Mina框架 jar包,使用与Android 与java后台消息推送使用
demo主要演示了如何使用MINA框架如建立长连接以及相关API的使用,比如心跳服务,自定义编解码器等
详细讲解如何使用MINA配合Android客户端实现聊天功能,解决中文乱码问题,解决Android客户端接收不到消息问题
解决中文乱码问题,保持Socket稳定可靠连接,Android Studio工程
Mina框架+常用JAR包 Mina框架+常用JAR包 Mina框架+常用JAR包 Mina框架+常用JAR包 Mina框架+常用JAR包 Mina框架+常用JAR包
apache mina 框架的学习文档,通过此文档可以基本了解mina框架。
java mina框架
该文档较好的介绍了,apache mina框架的使用方法。
apache mina 框架 实例 自定义协议包 自定义编码器 解码器 服务端 客户端
pache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性...
要实现mina框架最基本的资源包,拥有这个就可以实现mina的通讯
中文版mina框架开发手册
mina框架的demo 入门,开发 学习
apache-mina-2.0.4 mina框架的源码及jar包
Java_NIO基础教程、MINA教程, 并附上基于springboot 整合mina的基础平台框架,可以直接使用,也可以借鉴下
详细介绍mina框架的各个组成部分、服务器端的开发、客户端开发。并根据本人在工程项目中使用的代码,详细讲解了服务器端是客户端实现。实现了json格式的通信、以及文件的上传于下载等功能。图文并茂,以开发者的角度...