Mina用戶端和服務端代碼編寫__Java

來源:互聯網
上載者:User

 

1.用戶端
1.1編寫用戶端

package com.boonya.protocol;  import java.net.InetSocketAddress;  import java.nio.charset.Charset;  import org.apache.log4j.Logger;  import org.apache.mina.core.future.ConnectFuture;  import org.apache.mina.core.service.IoConnector;  import org.apache.mina.core.session.IoSession;  import org.apache.mina.filter.codec.ProtocolCodecFilter;  import org.apache.mina.filter.codec.textline.LineDelimiter;  import org.apache.mina.filter.codec.textline.TextLineCodecFactory;  import org.apache.mina.transport.socket.nio.NioSocketConnector;  import com.boonya.protocol.handler.request.ClientMessageHandler;    public class MyClient {        private static Logger logger = Logger.getLogger(MyClient.class);        private static String HOST = "127.0.0.1";        private static int PORT = 8900;        public static void main(String[] args) {          // 建立一個非組設的用戶端用戶端           IoConnector connector = new NioSocketConnector();          // 設定連結逾時時間           connector.setConnectTimeoutMillis(30000);          // 添加過濾器           connector.getFilterChain().addLast( // 添加訊息過濾器                   "codec",                  // Mina內建的根據文本分行符號編解碼的TextLineCodec過濾器 看到\r\n就認為一個完整的訊息結束了                   new ProtocolCodecFilter(new TextLineCodecFactory(Charset                          .forName("UTF-8"), LineDelimiter.WINDOWS.getValue(),                          LineDelimiter.WINDOWS.getValue())));          // 添加商務邏輯處理器類           connector.setHandler(new ClientMessageHandler());          IoSession session = null;          try {              ConnectFuture future = connector.connect(new InetSocketAddress(                      HOST, PORT));              future.awaitUninterruptibly(); // 等待串連建立完成               session = future.getSession();              session.write("mina");          } catch (Exception e) {              logger.info("用戶端連結異常...");          }            session.getCloseFuture().awaitUninterruptibly();          logger.info("Mina要關閉了");          connector.dispose();      }    }


1.2用戶端邏輯處理

package com.boonya.protocol.handler.request;  import org.apache.log4j.Logger;  import org.apache.mina.core.service.IoHandlerAdapter;  import org.apache.mina.core.session.IoSession;    public class ClientMessageHandler extends IoHandlerAdapter {        private static Logger logger = Logger.getLogger(ClientMessageHandler.class);        public void messageReceived(IoSession session, Object message)              throws Exception {          String msg = message.toString();          logger.info("用戶端接收到的資訊為:" + msg);      }        @Override      public void exceptionCaught(IoSession session, Throwable cause)              throws Exception {          logger.info("用戶端發生異常..." + cause);      }  }  


2.服務端
2.1 編寫服務端

package com.boonya.protocol;  import java.net.InetSocketAddress;  import java.nio.charset.Charset;  import org.apache.log4j.Logger;  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.LineDelimiter;  import org.apache.mina.filter.codec.textline.TextLineCodecFactory;  import org.apache.mina.filter.logging.LoggingFilter;  import org.apache.mina.transport.socket.nio.NioSocketAcceptor;  import com.boonya.protocol.handler.response.ServerMessageHandler;    public class Myserver {            private static Logger logger = Logger.getLogger(Myserver.class);        private static int PORT = 8900;        public static void main(String[] args) {          // 建立非阻塞的server端的socket           IoAcceptor acceptor = null;          try {              acceptor = new NioSocketAcceptor();              // 設定日誌過濾器               acceptor.getFilterChain().addLast("logger", new LoggingFilter());              acceptor.getFilterChain().addLast( // 添加訊息過濾器                       "codec",                      // Mina內建的根據文本分行符號編解碼的TextLineCodec過濾器 看到\r\n就認為一個完整的訊息結束了                       new ProtocolCodecFilter(new TextLineCodecFactory(Charset                              .forName("UTF-8"),                              LineDelimiter.WINDOWS.getValue(),                              LineDelimiter.WINDOWS.getValue())));              // 設定讀取資料的緩衝區的大小               acceptor.getSessionConfig().setReadBufferSize(2048);              // 讀取通道10s內無操作進入空閑狀態               acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);              // 綁定邏輯處理器               acceptor.setHandler(new ServerMessageHandler());              // 綁定連接埠               acceptor.bind(new InetSocketAddress(PORT));              logger.info("伺服器啟動成功.. 連接埠號碼為:" + PORT);            } catch (Exception e) {              e.printStackTrace();          }      }



2.2服務端業務處理

package com.boonya.protocol.handler.response;  import java.util.Date;  import org.apache.log4j.Logger;  import org.apache.mina.core.service.IoHandlerAdapter;  import org.apache.mina.core.session.IdleStatus;  import org.apache.mina.core.session.IoSession;    public class ServerMessageHandler extends IoHandlerAdapter {        public static Logger logger = Logger.getLogger(ServerMessageHandler.class);        public void sessionCreated(IoSession session) throws Exception {          logger.info("服務端與用戶端建立串連");      }        public void sessionOpened(IoSession session) throws Exception {          logger.info("伺服器與用戶端串連開啟...");      }        public void messageReceived(IoSession session, java.lang.Object message)              throws Exception {          String msg = message.toString();          logger.info("服務端接收的資料為:" + msg);          if ("bye".equals(msg)) {// 伺服器斷開的條件               session.close(true);          }          Date date = new Date();          session.write(date);      }        public void messageSent(IoSession session, Object message) throws Exception {          logger.info("服務端發送訊息成功...");      }        public void sessionIdle(IoSession session, IdleStatus status)              throws java.lang.Exception {          logger.info("服務端進入空閑狀態...");      }        public void exceptionCaught(IoSession session, Throwable cause)              throws Exception {          logger.info("服務端發送異常..."+cause);      }        public void sessionClosed(IoSession session) throws Exception {          logger.info("關閉串連...");      }    }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.