Mina框架

//MAVEN
 <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.6</version>
            <type>jar.sha256</type>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.6</version>
        </dependency>
        <dependency>
            <groupId>org.rxtx</groupId>
            <artifactId>rxtx</artifactId>
            <version>2.1.7</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.mina</groupId>
            <artifactId>mina-core</artifactId>
            <version>2.0.7</version>
        </dependency>
      

MINASERVER

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
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.IOException;
import java.net.InetSocketAddress;

public class Mina {//服务器代码
    public static void main(String[] args) {
        //创建一个非阻塞的server端socket NIO
        SocketAcceptor acceptor=new NioSocketAcceptor();
        //创造一个过滤垫
        DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
        //添加过滤器一行一行的读取数据(/r/n)
        chain.addLast("myChin",new ProtocolCodecFilter(new TextLineCodecFactory()));
        //设定服务端的消息处理器
        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

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"+session.getRemoteAddress());//获取远程的地址
    }
    //会话关闭
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        super.sessionClosed(session);
        System.out.println("client close");

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

    }


}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package 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;

public class MinaClient {
    public static void main(String[] args) {
        //创造接收数据的过滤器
        NioSocketConnector connector = new NioSocketConnector();
        //添加过滤垫
        DefaultIoFilterChainBuilder chain = connector.getFilterChain();
        //设定这个过滤器一行一行读取数据
       // chain.addLast("myChin",new ProtocolCodecFilter(new TextLineCodecFactory()));
        //设定过滤器以对象为单位
        chain.addLast("objectFilter",new ProtocolCodecFilter(new ObjectSerializationCodecFactory()));
        //设定服务器端的消息处理器:一个SampleMinaServerHandler对象
        connector.setHandler(new SampleMinaClientHandler());
        //失效时间
        connector.setConnectTimeoutMillis(10000);
        //连接到服务器
        ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9999));
        cf.awaitUninterruptibly();
        Scanner scanner = new Scanner(System.in);
        while (true) {
            //string的方式
//            System.out.println("请输入消息");
//            String info = scanner.nextLine();
//            //发送消息
//            cf.getSession().write(info);
            //以对象方式传输
            Message msg = new Message();
            System.out.println("form:");
            msg.setFrom(scanner.nextLine());
            System.out.println("to:");
            msg.setTo(scanner.nextLine());
            System.out.println("info");
            msg.setInfo(scanner.nextLine());
            msg.setType("send");
//发送消息
            cf.getSession().write(msg);
        }
        //等待服务器关闭结束长连接
        // cf.getSession().getCloseFuture().awaitUninterruptibly();
        //connector.dispose();
    }

}



消息处理器

package mina_;

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

public class SampleMinaClientHandler extends IoHandlerAdapter {
    @Override
    public void sessionOpened(IoSession session) throws Exception {
        super.sessionOpened(session);
        System.out.println("sessionOpened ");
    }

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

    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        super.messageReceived(session, message);
//        String message1 = (String) message;
//        System.out.println(message1);
          Message msg=(Message)message;
          session.write(msg);
    }
}



在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改过滤器改消息处理器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值