Mina框架入门demo
来源:互联网 发布:c 高级编程第8版 pdf 编辑:程序博客网 时间:2024/06/10 20:07
第一次接触Mina框架,通过阅读相关博客和文档,自己总结下搭建的过程。
本次建立一个普通工程,也可以使用maven。
jar包引入:
只需要引入图上4个jar即可。
Mina客户端代码:
package com.hbk.mina;import java.net.InetSocketAddress;import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;import org.apache.mina.core.future.ConnectFuture;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.transport.socket.nio.NioSocketConnector;/** * Mina客户端 * @author 黄宝康 * 2017年9月30日 下午2:09:58 */public class MinaClient { public static void main(String[] args) { // 创建TCP/IP连接 NioSocketConnector connection = new NioSocketConnector(); // 创建接受收据的过滤器 DefaultIoFilterChainBuilder chain = connection.getFilterChain(); // 往过滤器链的最后加入一个一行一行读取数据的过滤器 chain.addLast("mychin", new ProtocolCodecFilter(new TextLineCodecFactory())); // 客户端消息处理器 connection.setHandler(new MinaClientHandler()); // 设置超时时间 connection.setConnectTimeout(5000); // 连接到服务器 ConnectFuture cf = connection.connect(new InetSocketAddress("localhost", 8080)); // 等待连接完成 cf.awaitUninterruptibly(); cf.getSession().getCloseFuture().awaitUninterruptibly(); connection.dispose(); }}
客户端业务处理
package com.hbk.mina;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;/** * 客户端业务处理逻辑 * * @author 黄宝康 2017年9月30日 下午2:48:24 */public class MinaClientHandler extends IoHandlerAdapter { // 当客户端连接进入时 @Override public void sessionOpened(IoSession session) throws Exception { System.out.println("incomming 客户端: " + session.getRemoteAddress()); session.write("i am coming"); } @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { System.out.println("客户端发送信息异常...."); } // 当客户端发送消息到达时 @Override public void messageReceived(IoSession session, Object message) throws Exception { System.out.println("服务器返回的数据:" + message.toString()); } @Override public void sessionClosed(IoSession session) throws Exception { System.out.println("客户端与服务端断开连接....."); } @Override public void sessionCreated(IoSession session) throws Exception { System.out.println("one Client Connection" + session.getRemoteAddress()); session.write("我来了······"); }}
服务端
package com.hbk.mina;import java.net.InetSocketAddress;import java.nio.charset.Charset;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.TextLineCodecFactory;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;/** * Mina服务端 * @author 黄宝康 * 2017年9月30日 下午2:52:27 */public class MinaServer { // 服务器监听端口 private static final int PORT = 8080; public static void main(String[] args) { // 服务器端的主要对象 IoAcceptor acceptor = new NioSocketAcceptor(); // 设置过滤器 acceptor.getFilterChain().addLast("logger", new LoggingFilter()); // 协议解析,采用mina现成的UTF-8字符串处理方式 acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))); // 设置消息处理类(创建、关闭Session,可读可写等等,继承自接口IoHandler) acceptor.setHandler(new TimeServerHandler()); // 设置接受缓冲区大小 acceptor.getSessionConfig().setReadBufferSize(2048); // 读写通道无任何操作就进入空闲状态 acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); try { // 服务器开始监听 acceptor.bind( new InetSocketAddress(PORT) ); }catch(Exception e){ e.printStackTrace(); } }}
服务端处理类
package com.hbk.mina;import java.util.Date;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;public class TimeServerHandler extends IoHandlerAdapter { @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { cause.printStackTrace(); } /* * 这个方法是目前这个类里最主要的, 当接收到消息,只要不是quit,就把服务器当前的时间返回给客户端 如果是quit,则关闭客户端连接 */ @Override public void messageReceived(IoSession session, Object message) throws Exception { String str = message.toString(); if (str.trim().equalsIgnoreCase("quit")) { session.close(); return; } Date date = new Date(); System.out.println("hello" + str + session.getRemoteAddress() + date.toString()); session.write("huangbaokang"); System.out.println("Message written..."); } @Override public void sessionClosed(IoSession session) throws Exception { // TODO Auto-generated method stub super.sessionClosed(session); System.out.println("客户端与服务端断开连接....."); }}
测试运行:
阅读全文
0 0
- Mina框架入门demo
- Mina框架快速入门
- mina框架入门
- Hibernate框架入门Demo
- [一]Mina入门实例-Mina网络通信框架
- MINA框架
- MINA框架
- MINA 框架
- mina框架
- mina框架
- Mina入门
- MINA入门
- Mina--入门
- Apache Mina Demo
- Mina入门:Java NIO框架Mina、Netty、Grizzly介绍与对比
- mina框架分析:mina Filter
- shiro权限框架简单入门demo
- 高并发MINA框架,网络编程(SOCKET)实现,简单的网络聊天DEMO
- 项目报错“JavaServer Faces 2.2 can not be installed : One or more constraints”等一系列问题
- 【Java笔记3.5.1】自动类型转化
- IntelliJ IDEA Maven Gradle的配置
- 通过uiautomator及monkey集成一个GUI进行性能测试,工具初版
- 在CENTOS7上玩转Ethereum区块链(6):实验二--对外发布智能合约服务
- Mina框架入门demo
- chrome插件开发
- i2c tools 使用
- jquery选择器
- SQL笔试题
- Leetcode题解-500. Keyboard Row
- Android通过反射获取MetaData及一些坑
- STM32学习之:时钟频率
- OpenCV 接口调用(C++)