MINA框架例子

每天写篇博客。每天向某某打卡。保持热情,保持开心。

一.MINA框架:
Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架。它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。

二.编写简单的MINA程序

  1. 程序目的:实现客户端与服务端的简单交互
  2. 程序效果:
  3. Server端
    client端
  4. 源代码:
    Server.java:
public class Server {
    public static void main(String[] args) {
        //创建一个非阻塞的serever端
        SocketAcceptor acceptor = new NioSocketAcceptor();
        DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
        //设置一个过滤器,一行一行的读取数据
        chain.addLast("MyChain",new ProtocolCodecFilter(new TextLineCodecFactory()));
        //设定过滤器以对象为读取单位
        //chain.addLast("objectFilter",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));

        //设置服务器端的消息处理器
        acceptor.setHandler(new MinaServerHandler());
        int port = 9998;
        try {
            //绑定端口,启动服务器(不会阻塞,立即返回)
            acceptor.bind(new InetSocketAddress(port));
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Mina Server is running,listening on port:"+port);
    }
}

MinaServerHandler.java:

public class MinaClientHandler extends IoHandlerAdapter {
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        System.out.println("我连接到服务器:" + session.getRemoteAddress() + "了");
    }

    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        super.messageReceived(session, message);
        String info = (String) message;
        System.out.println("服务器对我说:" + info);
//        Message msg = (Message) message;
//        System.out.println("收到"+msg.toString());
        //session.write("收到了!辣鸡!");
    }

    @Override
    public void sessionClosed(IoSession session) throws Exception {
        super.sessionClosed(session);
        System.out.println("会话关闭了");
    }
}

Client.java:

public class Client {
    public static void main(String[] args) {
        //创建连接
        NioSocketConnector connector = new NioSocketConnector();
        DefaultIoFilterChainBuilder chain = connector.getFilterChain();
        chain.addLast("mychain",new ProtocolCodecFilter(new TextLineCodecFactory()));

        //设定过滤器以对象为读取单位
        //chain.addLast("objectFilter",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));

        connector.setHandler(new MinaClientHandler());
        connector.setConnectTimeoutMillis(1000*10);
        //连接服务器
        ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9998));
        cf.awaitUninterruptibly();//等待连接成功
        Scanner input = new Scanner(System.in);
        while (true){
            System.out.println("你要对服务器说什么?请输入:");
            String info = input.nextLine();
            //发送消息
            cf.getSession().write(info);
//            //以对象的方式传输数据
//            Message msg = new Message();
//            System.out.println("From:");
//            msg.setFrom(input.nextLine());
//            System.out.println("To:");
//            msg.setTo(input.nextLine());
//            System.out.println("info:");
//            msg.setInfo(input.nextLine());
//            System.out.println("type:");
//            msg.setInfo("send");
//            cf.getSession().write(msg);

        }
        //等待服务器连接关闭,结束长连接
        //cf.getSession().getCloseFuture().awaitUninterruptibly();
        //connector.dispose();

    }
}

MinaClientHandler.java:

public class MinaServerHandler extends IoHandlerAdapter {
    //一次回话打开
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        System.out.println("hello,client" + session.getRemoteAddress());
    }

    //一次回话结束
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        super.sessionClosed(session);
        System.out.println("goodbye,client" + session.getRemoteAddress());
    }

    //接收消息的方法
    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        super.messageReceived(session, message);//接收到的消息对象
        String msg = (String) message;//
        //Message msg = (Message) message;
        System.out.println("收到客户端消息:" + msg);
        //msg.setInfo("滚");
        session.write("滚");//向客户端发送消息对象
    }
}

message类:

public class Message implements Serializable {

    private String From;
    private String To;
    private String Type;
    private String info;

    @Override
    public String toString() {
        return "Message{" +
                "From='" + From + '\'' +
                ", To='" + To + '\'' +
                ", Type='" + Type + '\'' +
                ", info='" + info + '\'' +
                '}';
    }
    ....
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值