一個基於MINA框架應用的最簡單例子


直接上代碼。關於原理和主要的API以后在說。先能跑通了在說。

主要的包:mina-core-2.0.0.jar【到官網上下載完整項目包里面還有文檔和依賴包】,jcl-over-slf4j-1.5.11.jar,slf4j-api-1.5.11.jar,slf4j-nop-1.5.11.jar這三個是mina使用的日志包。前面二個mina項目包里有。最后一個到官網上下吧。

服務器類:

public class MinaServer {  
    private static final int PORT = 22222;// 定義監聽端口  
    public static void main(String[] args) throws IOException {  
        //創建一個非阻塞的Server端socket,用NIO  
        IoAcceptor acceptor = new NioSocketAcceptor();  
        //創建接受數據的過濾器  
        DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();  
        //設定這個過濾器將一行一行的讀取數據  
        chain.addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory()));// 指定編碼過濾器  
        // 指定業務邏輯處理器  
        acceptor.setHandler(new Handler());  
        // 設置端口號  
        acceptor.setDefaultLocalAddress(new InetSocketAddress(PORT));  
        acceptor.bind(); //啟動監聽  
        System.out.println("Mina Server is Listen on:"+PORT);  
    }  
}  

 處理類。用來處理請求連接的。

public class Handler extends IoHandlerAdapter {  
    //當一個客戶端連接進入時  
    @Override  
    public void sessionOpened(IoSession session)throws Exception {  
        System.out.println("incoming client:"+session.getRemoteAddress());  
    }  
    //當客戶端發送消息到達時  
    @Override  
    public void messageReceived(IoSession session, Object message)throws Exception {  
        String s = message.toString();  
        System.out.println("client send message is:"+s);  
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd mm:hh:ss");  
        Date date = new Date();  
        session.write(sdf.format(date));// 返回當前時間的字符串  
        System.out.println("message written...");  
    }  
    //當一個客戶端連接關閉時  
    @Override  
    public void sessionClosed(IoSession session)throws Exception {  
        System.out.println("one client closed");  
    }  
}  

 服務端就完事兒了。運行MainServer就行了。

然后是測試下。在命令行運行“telnet 127.0.0.1 22222”,當服務器端出現“incoming client:/127.0.0.1:2333”,表示你連接成功了

然后你隨便寫個字符,然后回車。如果可以看到由服務器返回來的時間串就OK了。

  1. public class Handler extends IoHandlerAdapter {  
  2.     //當一個客戶端連接進入時  
  3.     @Override  
  4.     public void sessionOpened(IoSession session)throws Exception {  
  5.         System.out.println("incoming client:"+session.getRemoteAddress());  
  6.     }  
  7.     //當客戶端發送消息到達時  
  8.     @Override  
  9.     public void messageReceived(IoSession session, Object message)throws Exception {  
  10.         String s = message.toString();  
  11.         System.out.println("client send message is:"+s);  
  12.         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd mm:hh:ss");  
  13.         Date date = new Date();  
  14.         session.write(sdf.format(date));// 返回當前時間的字符串  
  15.         System.out.println("message written...");  
  16.     }  
  17.     //當一個客戶端連接關閉時  
  18.     @Override  
  19.     public void sessionClosed(IoSession session)throws Exception {  
  20.         System.out.println("one client closed");  
  21.     }  
  22. }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM