• MINA框架使用


    转自:https://www.cnblogs.com/yanxiaoge/p/10744454.html

    1、下载

    1
    http://mina.apache.org/

    2、将依赖包添加到工程目录下(在工程目录下创建libs(directory目录))

    3、将 slf4j-api-1.7.26.jar 和 mina-core-2.0.21.jar 依赖包添加到libs目录下

    4、给这两个文件和工程绑定关系,方法:选中两个文件,右击,选择 Add as Library

    代码实现

     服务端

    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
    50
    51
    52
    53
    54
    55
    56
    57
    import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
    import org.apache.mina.core.service.IoHandlerAdapter;
    import org.apache.mina.core.session.IoSession;
    import org.apache.mina.filter.codec.ProtocolCodecFilter;
    import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
    import org.apache.mina.transport.socket.SocketAcceptor;
    import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
     
    import java.io.*;
    import java.net.InetSocketAddress;
     
    public class Server{
        public static void main(String[] args) {
            //创建一个非堵塞的Server(Socker),[NIO模式]
            SocketAcceptor acceptor = new NioSocketAcceptor();
            //创建一个过滤器对象
            DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
     
            //设定一个过滤器,一行一行的读取数据(/r/n)
            //chain.addLast("myChain",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));//表示传数据的数据是一个对象;
            chain.addLast("myChain",new ProtocolCodecFilter(new TextLineCodecFactory()));
            //设置服务器的消息处理器
            acceptor.setHandler(new MinaServerHandle());
            int port = 8080; //服务器的端口号
            try {
                //绑定端口,并且启动服务器,立刻返回,不会堵塞
                acceptor.bind(new InetSocketAddress(port));
     
            catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("MINA服务器已经开启,端口号:"+port);
        }
    }
     
    //服务器端的消息处理器
    class MinaServerHandle extends IoHandlerAdapter {
        //会话开始
        @Override
        public void sessionOpened(IoSession session) throws Exception {
            super.sessionOpened(session);
            System.out.println(session.getRemoteAddress()+"已连接");//获取客户端连接的ip地址
        }
        //会话结束
        @Override
        public void sessionClosed(IoSession session) throws Exception {
            System.out.println("会话结束");
        }
     
        //接受消息
        @Override
        public void messageReceived(IoSession session, Object message) throws Exception {
            super.messageReceived(session, message);
            System.out.println(message); //接受消息
            session.write("hellow");
        }
    }

      

    客户端1

    1.可以使用window自带的telnet工具和服务器连接,并进行通信

    首先打开Telnet,在控制面板中,打开程序和功能,在打开 (打开或关闭windows 功能),选中Telnet 客户端 ,确定

    测试:控制台上输入  telnet localhost(服务器的ip地址)   8080(服务器的端口) ,即可

    客户端2

    2.自己写客户端程序

    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
    50
    import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
    import org.apache.mina.core.future.ConnectFuture;
    import org.apache.mina.core.service.IoHandlerAdapter;
    import org.apache.mina.core.session.IoSession;
    import org.apache.mina.filter.codec.ProtocolCodecFilter;
    import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
    import org.apache.mina.transport.socket.nio.NioSocketConnector;
     
    import java.net.InetSocketAddress;
    import java.util.Scanner;
     
    public class client {
        public static void main(String[] args) {
            NioSocketConnector conn = new NioSocketConnector();
            DefaultIoFilterChainBuilder chain = conn.getFilterChain();
            chain.addLast("myChain",new ProtocolCodecFilter(new TextLineCodecFactory()));
            conn.setHandler(new MinaClientHandle());
            conn.setConnectTimeoutCheckInterval(3000);
     
            //连接服务器
            ConnectFuture cf = conn.connect(new InetSocketAddress("localhost", 8080));
            cf.awaitUninterruptibly(); //等待连接成功;
            Scanner input = new Scanner(System.in);
            while (true){
                System.out.println("输入消息");
                String msg = input.nextLine();
                cf.getSession().write(msg);
            }
            //等待服务器关闭连接
            //cf.getSession().getCloseFuture().awaitUninterruptibly();
            //conn.dispose();
        }
    }
    class MinaClientHandle extends IoHandlerAdapter {
        @Override
        public void sessionOpened(IoSession session) throws Exception {
            super.sessionOpened(session);
            System.out.println("已连接");
        }
        @Override
        public void sessionClosed(IoSession session) throws Exception {
            super.sessionClosed(session);
            System.out.println("已关闭");
        }
        @Override
        public void messageReceived(IoSession session, Object message) throws Exception {
            super.messageReceived(session, message);
            System.out.println("服务器返回消息:"+message);
        }
    }

      

  • 相关阅读:
    《真是头铁的》 回复
    今天 凌晨, 我 的 许多 帖子 (回复) 被 反相吧 吧务 删除
    《【建议】吧务同志们每个礼拜写一篇规范论文》 回复
    《有个数学模型想咨询下吧友的意见》 回复
    《请大家推荐反相吧大吧主》 回复
    复变函数 和 积分变换 就是 自己 设定 一套规则 自己 玩
    《这是等臂杠杆还是省力杠杆?》 回复
    《我的理论转帖讨论》 回复
    《数学已经明确了,0.999...与1是完全相等的》 回复
    和 @物空必能 的 对话
  • 原文地址:https://www.cnblogs.com/sharpest/p/12702772.html
Copyright © 2020-2023  润新知