Mina初级使用

来源:互联网 发布:java 对象初始化 编辑:程序博客网 时间:2024/06/07 22:26
  1. 首先去官网下载相关jar包:http://mina.apache.org/
    解压:这里演示的主要引用两个包:
    dist/mina-core-2.0.9.jar —mina核心包
    lib/slf4j-api-1.7.7.jar —mina依赖的日志包
  2. 新建java工程,创建mina服务器端
public class MinaService {    public static void main(String[] args) {        NioSocketAcceptor acceptor ;        try {            //1.创建NioSocketAcceptor            acceptor = new NioSocketAcceptor();            //2. 设置handler            acceptor.setHandler(new ServiceHandler());            //3. 设置拦截器 : TextLineCodecFactory---这是默认的文本拦截器            acceptor.getFilterChain().addLast("text", new ProtocolCodecFilter(new TextLineCodecFactory()));                 //设置,如果客户端在5s内没有连接的话,会进入空闲状态,调用sessionIdle()方法            acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 5);             //4. 绑定端口            acceptor.bind(new InetSocketAddress(8888));        } catch (Exception e) {            e.printStackTrace();        }    }}
  1. 创建IoHandlerAdapter的实现类
/** * 创建一个处理类 * @author johnny * * 2015年4月22日 下午8:56:18 */public class ServiceHandler extends IoHandlerAdapter {    @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 --->" + status);    }    @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 s = (String) message;        System.out.println("messageReceived: " + s);        //发送数据给客户端        session.write("Service replay : " + s);    }    @Override    public void messageSent(IoSession session, Object message) throws Exception {        String s = (String) message;        System.out.println("messageSent: " + s);    }    @Override    public void inputClosed(IoSession session) throws Exception {        System.out.println("inputClosed");    }}

经过上面3部,mina算是可以接受客户端的通信了,当然更高级的应用后面再写。
4. 下面写一个客户端去测试

public class SocketClient {    BufferedReader socketReader;    public static void main(String[] args) {        SocketClient client = new SocketClient();        client.start();    }    private  void start() {        Socket socket = null;        BufferedReader reader = null;        BufferedWriter writer = null;        try {            socket = new Socket("127.0.0.1", 8888);            //从键盘中接受输入            reader = new BufferedReader(new InputStreamReader(System.in));            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));            socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));            receiverMsgListener(socketReader);            String temp = null;            while (!(temp = reader.readLine()).equals("bye")) {//              System.out.println(temp + "\n");                writer.write(temp + "\n");                writer.flush();            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                socket.close();                reader.close();                writer.close();                socketReader.close();            } catch (IOException e) {                e.printStackTrace();            }        }    }    public void receiverMsgListener(final BufferedReader socketReader) {        new Thread(new Runnable() {            public void run() {                while (true) {                    try {                        System.out.println(socketReader.readLine());                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }        }).start();    }}

以上就是mina的初体验!这是一种长连接方式。

0 0
原创粉丝点击