Mina--入门

1 依赖包

<!-- 日志支持 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging-api</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j-over-slf4j</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.mina</groupId>
            <artifactId>mina-core</artifactId>
            <version>2.0.16</version>
        </dependency>

2 服务端

public class TextMian {
    private static final String HOST_NAME = "127.0.0.1";

    private static final Integer PORT = 7080;

    private static final InetSocketAddress SOCKET_ADDRESS = new InetSocketAddress(
            HOST_NAME, PORT);

    private IoAcceptor acceptor = null;

    public void listener() {
        // 设置编码过滤器
        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(1024);
            acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);// 设置空闲状态间隔
            acceptor.setHandler(new Myhandler());// 设置信息处理类
            acceptor.bind(SOCKET_ADDRESS);// 绑定地址
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Server ->" + PORT);
    }

    public static void main(String[] args) {
        new TextMian().listener();
    }
}

处理器

public class Myhandler extends IoHandlerAdapter {

    @Override
    public void exceptionCaught(IoSession session, Throwable cause)
            throws Exception {
        super.exceptionCaught(session, cause);
        System.out.println("exceptionCaught");
    }

    @Override
    public void sessionCreated(IoSession session) throws Exception {
        super.sessionCreated(session);
        System.out.println("sessionCreated");
    }

    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        System.out.println("sessionOpened");
    }

    /**
     * 关闭时执行的方法
     */
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        super.sessionClosed(session);
        System.out.println("sessionClosed");
    }

    /**
     * 空闲状态时的,间隔执行
     */
    @Override
    public void sessionIdle(IoSession session, IdleStatus status)
            throws Exception {
        super.sessionIdle(session, status);
        System.out.println("sessionIdle");
    }

    /**
     * 有数据发送时执行
     */
    @SuppressWarnings("deprecation")
    @Override
    public void messageReceived(IoSession session, Object message)
            throws Exception {
        super.messageReceived(session, message);
        System.out.println("messageReceived");
        String msg = (String) message;
        System.out.println("服务器端接受到的数据为--》" + msg);
        if ("exit".equals(msg)) {
            session.close();
        }
        Date date = new Date();
        session.write(date);
    }
}

3 启动服务端,然后启动windows控制台来模拟客户端。
连接服务端:
这里写图片描述
发送消息:
这里写图片描述

4 Mina客户端

public class MinaClient {

    private static final String HOST_NAME = "127.0.0.1";

    private static final Integer PORT = 7080;

    private static final InetSocketAddress SOCKET_ADDRESS = new InetSocketAddress(
            HOST_NAME, PORT);

    @SuppressWarnings("deprecation")
    public void listener() {
        IoSession session = null;

        IoConnector connector = new NioSocketConnector();
        connector.setConnectTimeout(3000);
        // 设置过滤器
        connector.getFilterChain().addLast(
                "coderc",
                new ProtocolCodecFilter(new TextLineCodecFactory(Charset
                        .forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),
                        LineDelimiter.WINDOWS.getValue())));
        connector.setHandler(new MyClientHandler());
        ConnectFuture future = connector.connect(SOCKET_ADDRESS);
        future.awaitUninterruptibly();// 等待连接
        session = future.getSession();
        session.write("你好!watchmen");
        session.getCloseFuture().awaitUninterruptibly();// 等待关闭连接
        connector.dispose();
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new MinaClient().listener();
    }
}

public class MyClientHandler extends IoHandlerAdapter {

    @Override
    public void exceptionCaught(IoSession session, Throwable cause)
            throws Exception {
        System.out.println("exceptionCaught");
    }

    @Override
    public void messageReceived(IoSession session, Object message)
            throws Exception {
        String msg = (String) message;
        System.out.println(message);
    }
}

启动服务端和客户端,即可看到效果:
这里写图片描述
参考博客:https://yq.aliyun.com/articles/50581

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值