首先推薦幾篇Mina框架的好文章:
Mina框架研究(1)
Mina框架研究(2)
Mina框架研究(3)
環境准備:
- 首先到官方網站下載最新的 MINA 版本,地址是:http://mina.apache.org。下載之前先介紹一下 MINA 的兩個版本:1.0.x 適合運行環境為 JDK1.4,1.1.x 適合 JDK1.5 的版本,兩者的編譯環境都需要 JDK1.5。JDK1.5 已經是非常普遍了,本文中使用 1.1.5 版本的 MINA,編譯和運行所需的文件是 mina-core-1.1.5.jar。
- 下載 MINA 的依賴包 slf4j。MINA 使用此項目作為日志信息的輸出,而 MINA 本身並不附帶此項目包,請到http://www.slf4j.org/download.html 地址下載 slf4j 包,slf4j 項目解壓后有很多的文件,本例中只需要其中的 slf4j-api-1.4.3.jar 和 slf4j-simple-1.4.3.jar 這兩個 jar 文件。如果沒有這兩個文件就會導致啟動例子程序的時候報 org/slf4j/LoggerFactory 類沒找到的錯誤。
- 當然要求機器上必須裝有 1.5 或者更新版本的 JDK。
- 最好你應該選擇一個順手的 Java 開發環境例如 Eclipse 或者 NetBeans 之類的,可以更方便的編碼和調試,雖然我們的最低要求只是一個簡單的文本編輯器而已。
Mina第一個HelloWorld程序:
服務端程序:
Minaserver.java:
1 public class MinaServer { 2 private IoAcceptor ioAcceptor; 3 4 public MinaServer(int port) 5 { 6 ioAcceptor = new NioSocketAcceptor(); 7 try { 8 //設置處理器 9 ioAcceptor.setHandler(new MyHandler()); 10 //綁定端口 11 ioAcceptor.bind(new InetSocketAddress(port)); 12 //規定協議,設定過濾,這里用TextLineCodecFactory文本協議 13 ioAcceptor.getFilterChain().addLast("test", new ProtocolCodecFilter(new TextLineCodecFactory())); 14 } catch (IOException e) { 15 e.printStackTrace(); 16 } 17 } 18 }
MyHandler.java: (服務端接收消息后的業務邏輯處理)
1 public class MyHandler extends IoHandlerAdapter { 2 /**接收到信息后進行邏輯處理*/ 3 @Override 4 public void messageReceived(IoSession session, Object message) 5 throws Exception { 6 String getmessage = message.toString(); 7 System.out.println(getmessage); 8 } 9 }
客戶端程序:
MinaClient.java:
1 public class MinaClient { 2 private IoConnector ioConnector; 3 4 public MinaClient(String host, int port) 5 { 6 ioConnector = new NioSocketConnector(); 7 //過濾信息,封裝成文本格式輸出 8 ioConnector.getFilterChain().addLast("test", new ProtocolCodecFilter(new TextLineCodecFactory())); 9 10 ioConnector.setHandler(new ClientHandler("Hello world!")); 11 ioConnector.connect(new InetSocketAddress(host, port)); 12 } 13 }
ClientHandler.java:
1 public class ClientHandler extends IoHandlerAdapter { 2 //發送給服務端的消息 3 private String sendToServer; 4 5 public ClientHandler(String words) 6 { 7 sendToServer = words; 8 } 9 10 @Override 11 public void sessionOpened(IoSession session) throws Exception { 12 session.write(sendToServer); 13 } 14 }