Mina初級使用

  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的初體驗!這是一種長連接方式。

發佈了36 篇原創文章 · 獲贊 2 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章