高並發MINA架構,網路編程(SOCKET)實現,簡單的網路聊天DEMO

來源:互聯網
上載者:User

標籤:mina

服務端

和http://blog.csdn.net/simonchi/article/details/40613923   文章類似

Apache MINA是一個網路應用程式架構,用來協助使用者簡單地開發高效能和高可擴充性的網路應用程式。它提供了一個通過Java NIO在不同的傳輸例如TCP/IP和UDP/IP上抽象的事件驅動的非同步API

對JAVA的SOCKET做了一層封裝

Apache MINA 通常可被稱之為:

NIO 架構庫;

一篇好的關於MINA詳解的文章推薦:  http://www.iteye.com/topic/1109234#%E6%B3%A8%E4%BA%8C

用戶端/伺服器架構庫;

或者一個網路socket庫。

package com.tree.demo.mina;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.charset.Charset;import org.apache.mina.core.service.IoAcceptor;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;public class MinaServer {private static int BUF_SIZE = 1024;private static int PORT = 8212;public static void main(String[] args) {// TODO Auto-generated method stubIoAcceptor acceptor = new NioSocketAcceptor();acceptor.getFilterChain().addLast("logger", new LoggingFilter());acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));acceptor.setHandler(new MinaBizHandler());acceptor.getSessionConfig().setReadBufferSize(BUF_SIZE);acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);try {acceptor.bind(new InetSocketAddress(PORT));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

服務端處理器,重寫了IoHandlerAdapter類中的方法,該類負責處理網路互動的資料以及session的關閉建立,串連的處理等等

package com.tree.demo.mina;import java.util.Date;import java.util.Scanner;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.session.IoSession;public class MinaBizHandler extends IoHandlerAdapter {public void exceptionCaught(IoSession session, Throwable cause)throws Exception {cause.printStackTrace();}@Overridepublic void sessionCreated(IoSession session) throws Exception {// TODO Auto-generated method stubsuper.sessionCreated(session);}@Overridepublic void sessionOpened(IoSession session) throws Exception {// TODO Auto-generated method stubsuper.sessionOpened(session);}@Overridepublic void sessionClosed(IoSession session) throws Exception {// TODO Auto-generated method stubsuper.sessionClosed(session);session.close(true);}@Overridepublic void sessionIdle(IoSession session, IdleStatus status)throws Exception {// TODO Auto-generated method stubSystem.out.println("IDLE : " + session.getIdleCount(status) + ">now : " + new Date());}@Overridepublic void messageReceived(IoSession session, Object message)throws Exception {// TODO Auto-generated method stubString str = message.toString();System.out.println("Message received: " + str);if (str.trim().equalsIgnoreCase("quit")) {session.close(true);return;}Scanner sc = new Scanner(System.in);String cnt = sc.nextLine();StringBuffer say = new StringBuffer();while (!cnt.equals("go")) {say.append("\n" + cnt);cnt = sc.nextLine();}// Date now = new Date();session.write(say);System.out.println("Message written !");}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {// TODO Auto-generated method stubsuper.messageSent(session, message);System.out.println("server sent : " + message.toString());}public static void main(String[] args) {// TODO Auto-generated method stub}}

以上就實現了服務端的程式,從handler的程式處理來看,當每次收到用戶端發來的訊息,就會開始等待服務端輸入資訊,知道輸入go才會將服務端訊息發送給用戶端,而用戶端則在輸入quit後,就斷開與服務端的串連了

用戶端訊息


服務端訊息



通過該例子,各位就可以在此基礎上發揮,寫個GUI的聊天工具就很輕鬆了,核心的東西已經有了,剩下的就是一些其它處理了。






















高並發MINA架構,網路編程(SOCKET)實現,簡單的網路聊天DEMO

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.