歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 使用Mina框架開發 QQ Android 客戶端

使用Mina框架開發 QQ Android 客戶端

日期:2017/3/1 10:07:49   编辑:Linux編程

Apache MINA是一個網絡應用程序框架,用來幫助用戶簡單地開發高性能和高可靠性的網絡應用程序。它提供了一個通過Java NIO在不同的傳輸例如TCP/IP和UDP/IP上抽象的事件驅動的異步API。

  Apache MINA 也稱為:
  ● NIO 框架庫
  ● 客戶端服務器框架庫
  ● 一個網絡套接字庫
  MINA雖然簡單但是仍然提供了全功能的網絡應用程序框架:
  ● 為不同的傳輸類型提供了統一的API:
  ○ 通過Java NIO提供TCP/IP 和 UDP/IP支持
  ○ 通過RXTX提供串口通訊(RS232)
  ○ In-VM管道通訊
  ○ 你能實現你自己的API!
  ● 過濾器作為一個擴展特性; 類似Servlet過濾器
  ● 低級和高級的API:
  ○ 低級: 使用字節緩存(ByteBuffers)
  ○ 高級: 使用用戶定義的消息對象(objects)和編碼(codecs)
  ● 高度定制化線程模型:
  ○ 單線程
  ○ 一個線程池
  ○ 一個以上的線程池(也就是SEDA)
  ● 使用Java 5 SSL引擎提供沙盒(Out-of-the-box) SSL · TLS · StartTLS支持
  ● 超載保護和傳輸流量控制
  ● 利用模擬對象進行單元測試
  ● JMX管理能力
  ● 通過StreamIoHandler提供基於流的I/O支持
  ● 和知名的容器(例如PicoContainer、Spring)集成
  ● 從Netty平滑的遷移到MINA, Netty是MINA的前輩。

MINA 基本類的描述 :
IoAccepter 相當於網絡應用程序中的服務器端
IoConnector 相當於客戶端
IoSession 當前客戶端到服務器端的一個連接實例
IoHandler 業務處理邏輯
IoFilter 過濾器用於懸接通訊層接口與業務層接口

要編寫和運行一個基於Apache MINA 2.0的程序,需要JDK 5.0以上版本,

下面看一個domo:

准備工作:

mina-core-2.0.0-M6.jar
slf4j-api-1.5.2.jar


在官網下載到mina,找出這幾個jar,添加到項目,

服務端的代碼:

  1. public class MainFrame {
  2. private static final int PORT=5469;
  3. public static void main(String[] args) throws Exception{
  4. IoAcceptor acceptor=new NioSocketAcceptor();
  5. IoFilter filter=new ProtocolCodecFilter(new TextLineCodecFactory());
  6. acceptor.getFilterChain().addLast("vestigge", filter);
  7. acceptor.setHandler(new ServerHandler());
  8. acceptor.bind(new InetSocketAddress(PORT));
  9. System.out.println( "服務器正在監聽端口" + PORT +"...");
  10. }
  11. }

其中new ServerHandler()傳入的是實現了IoHandler接口的類,代碼如下:

  1. public class ServerHandler extends IoHandlerAdapter {
  2. @Override
  3. public void messageReceived(IoSession session, Object message)
  4. throws Exception {
  5. System.out.println("收到客戶端消息:" + message.toString());
  6. }
  7. @Override
  8. public void exceptionCaught(IoSession session, Throwable cause)
  9. throws Exception {
  10. System.out.println("服務器出現異常:" +cause);
  11. }
  12. }

重寫了父類中的messageReceived()和exceptionCaught()

一般在messageReceived()中對客戶端的請求進行業務,邏輯處理

下面在命令行用telnet測試一下,

如果是win 7沒有telnet,找到“打開或關閉Windows功能” ,找到telnet客戶端和telnet服務端,勾選即可,

在命令行下輸入telnet 127.0.0.1 5469

然後再telnet窗口中輸入幾個字符回車,在控制台可以看到服務器成功收到了消息:

Copyright © Linux教程網 All Rights Reserved