0
点赞
收藏
分享

微信扫一扫

Mina服务器入门

兽怪海北 2022-02-09 阅读 82

服务端:

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

尝试访问:

       python:

import socket
import time
import json
 
host = '127.0.0.1'
port = 666
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) #在客户端开启心跳维护
client.connect((host, port))
print("连接成功")
while(True):
    a = input("请输入信息")
    client.send((a + "\r\n").encode())
    print('send data')
    time.sleep(1)

输出:

Server:__>666
Session Created
Session Opened
服务端接收数据
123
messageSent
服务端接收数据
nihao
messageSent
服务端接收数据
泥豪
messageSent
服务端接收数据
exit
Session Closed

总结:

1.NioSocket

2.设置编码解码过滤器

3.设置一些session属性

4.绑定一个端口

                

举报

相关推荐

0 条评论