Java中的MINA框架

Java中的MINA框架_第1张图片

 Java中的MINA框架_第2张图片

 Java中的MINA框架_第3张图片

 Server端

package com.chen.mina;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
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.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.Iterator;

/**
 *服务器
 */
public class Server {
    public static void main(String[] args) {
        //创建一个非阻塞的Server端Socket  NIO
        SocketAcceptor acceptor = new NioSocketAcceptor();
        DefaultIoFilterChainBuilder Chain = acceptor.getFilterChain();
        //设定一个过滤器,一行一行的读取数据(/r/n)
//        Chain.addLast("myChain",new ProtocolCodecFilter(new TextLineCodecFactory()));
        //设定过滤器,以对象为单位来读取数据
        Chain.addLast("objectFilter",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
        //设置服务端的消息处理器
        acceptor.setHandler(new MinaServerHandler());
        //定义端口号
        int port = 9999;
        try {
            //绑定端口,启动服务器(不会阻塞,立即返回)
            acceptor.bind(new InetSocketAddress(port));
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Mina Server Running,Listener on : "+port);
    }
}

MinaServerHandler

package com.chen.mina;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

/**
 * 服务器端的消息处理器
 */
public class MinaServerHandler extends IoHandlerAdapter {

    //一次会话被打开

    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        System.out.println("welcome client: "+session.getRemoteAddress());
    }
    //会话关闭

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

    //接收消息
    @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);
        //向客户端发送消息对象
        session.write("echo"+msg);
    }
}

Client端

package com.chen.mina;

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.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

import java.net.InetSocketAddress;
import java.util.Scanner;

/**
 * @date 2022/4/15--9:20
 * 客户端
 */
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(10000);
        //连接服务器
        ConnectFuture cf =connector.connect(new InetSocketAddress("localhost",9999));
         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());
        msg.setType("send");
        cf.getSession().write(msg);
        //等待服务器连接关闭,结束长连接
//        cf.getSession().getCloseFuture().awaitUninterruptibly()
        //connector.dispose();
    }
}

MinaClientHandler

package com.chen.mina;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

/**
 * @date 2022/4/15--9:21
 * 客户端消息处理器
 */
public class MinaClientHandler extends IoHandlerAdapter {
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        System.out.println("session Opened");
    }

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

    @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);
    }
}

Message

package com.chen.mina;

import java.io.Serializable;

/**
 * @date 2022/4/15--9:49
 */
public class Message implements Serializable {

    private String from;
    private String to;
    private String type;
    private String info;

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    @Override
    public String toString() {
        return "Message{" +
                "from='" + from + '\'' +
                ", to='" + to + '\'' +
                ", type='" + type + '\'' +
                ", info='" + info + '\'' +
                '}';
    }
}

你可能感兴趣的:(Java开发,java,架构,算法)