博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mina框架入门demo
阅读量:3527 次
发布时间:2019-05-20

本文共 5209 字,大约阅读时间需要 17 分钟。

本次建立一个普通工程,也可以使用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;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();    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

这里写图片描述

客户端业务处理

package com.hbk.mina;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;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("我来了······"); }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

服务端

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;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();            }      }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

服务端处理类

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("客户端与服务端断开连接....."); }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

测试运行:

这里写图片描述

这里写图片描述

你可能感兴趣的文章