Mina服务器入门

服务端:

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

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

public class minaServer {
    static int PORT = 666;
    static IoAcceptor acceptor = null;
    public static void main(String[] args) {
        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);
            //  10ms不操作进入空闲状态
            acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE,10);

            //  设置处理handler
            acceptor.setHandler(new Myhandler());
            //  绑定端口
            acceptor.bind(new InetSocketAddress(PORT));
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Server:__>"+PORT);
    }
}

Myhandler:

        

public class Myhandler extends IoHandlerAdapter {
    public Myhandler() {
        super();
    }

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

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

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

    @Override
    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
        System.out.println("Session Idle");
    }

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

    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        String msg = (String) message;
        System.out.println("服务端接收数据");
        System.out.println(msg);
        if(msg.equals("exit")){
            session.close();
        }
        Date date = new Date();
        session.write(date);
    }

    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
        System.out.println("messageSent");
    }
}

尝试访问:

       客户端:

MinaClient:

        

import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

public class MinaClient {
    private static String host = "127.0.0.1";
    private static int port = 666;

    public static void main(String[] args) {
        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 connect = connector.connect(new InetSocketAddress(host, port));
        connect.awaitUninterruptibly(); //等待连接,阻塞
        session = connect.getSession();
        session.write("泥豪!");
        session.getCloseFuture().awaitUninterruptibly();//等待关闭连接
        connector.dispose();
    }
}

MyclientHandler:

public class MyClientHandler extends IoHandlerAdapter {
    public MyClientHandler() {
        super();
    }

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

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

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

    @Override
    public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
        System.out.println("sessionIdle");
    }

    @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("msg:"+msg);
    }

    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
        System.out.println("messageSent");
    }
}

输出:

        client:

sessionCreated
sessionOpened
messageSent
msg:Wed Feb 09 22:18:17 CST 2022

        server:

erver:__>666
Session Created
Session Opened
服务端接收数据
泥豪!
messageSent
Session Idle

总结:

1.NioSocket

2.设置编码解码过滤器

3.设置一些session属性

4.绑定一个端口

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值